3

ミューテックスと条件によって同期されるキューを共有する 2 つのプロセスがあります。プロセスの 1 つに次のコードがあります。

named_mutex mutex(open_only, "MyMutex");

int main()
{
   while(1)
   {
      scoped_lock <named_mutex> lock(mutex)
      //do some processing 
   }
}

私の質問は、mutex が while ループ内のすべての呼び出しでスコープを持っているのか、それとも while ループが開始するたびに取得する必要があるのか​​ということです。ロックを解除するためのミューテックスのスコープは何ですか? while ループの最後に毎回ミューテックスのロックが解除されているようです。

ありがとう

4

2 に答える 2

10

ループ本体内の他のローカル変数とまったく同じように動作します。反復ごとに作成および破棄されます。この場合、反復ごとに 1 回ミューテックスをロックおよびロック解除します。

于 2013-07-18T16:59:02.040 に答える
0

Ascoped_lockは、その名前が示すように、ミューテックスの作成時に (ctor で) ロックし、削除時に (dtor で) ロックを解除します。

lockインスタンスのスコープは本体内にwhileあるため、ミューテックスはが作成されるとロックされ、ループが終了するたびscoped_lockにロックが解除されます。ループごとに。whilebreakcontinuereturnwhile

于 2013-07-18T17:00:55.557 に答える