3

以下に示すようなコードがある場合、私の質問は、signal.WaitOne を呼び出すスレッドが、別のスレッドがロックを取得するために取得したロックを解放するかどうかです。これは些細な質問だと思いますが、このようなものを検索してみましたが、何も見つかりませんでした。誰かがこれに光を当てて、私の投稿/タイトルを変更して、将来これを探している人が検索しやすくすることができれば、大いに感謝します.

AutoResetEvent signal = new AutoResetEvent(false);

foo() {
  Monitor.Enter(locker);
  try {
       // code

       if(condition)
          signal.WaitOne();

       // code         
  } finally {
      Monitor.Exit(locker);
  }
}

編集:将来の参照のためにこの編集を行っています:

私がやろうとしていることのより良いパラダイムのように思えます:

foo() {
  Monitor.Enter(locker);
  try {
       // code

       while(condition)
          Monitor.Wait(locker);

       // code         
  } finally {
      Monitor.Exit(locker);
  }
}

bar {
  lock(locker) {
      Monitor.Pulse(locker);
  }
}
4

1 に答える 1