Monitor.Enter
とMonitor.Exit
は同じスレッドから呼び出されるように設計されています。しかし、取得したスレッドとは異なるスレッドでロックを解除する必要がある場合はどうしたらよいですか?Monitor.EnterとMonitor.Exitを別のスレッドで使用する
たとえば、このリソースを使用する共有リソースと非同期操作があります。操作はBeginOperation
で始まり、共有リソースのロックを取得します。また、ロックを解放する方法はEndOperation
です。 EndOperation
は通常、コールバックから別のスレッドで呼び出されるため、EndOperation
メソッドでMonitor.Exit
を呼び出すことはできません。この場合の最善のアプローチは何ですか? Monitor
の代わりにAutoResetEvent
でロックを再チェックするのが良い解決策ですか?
"セマフォ"を使用しますか? –
@pst特に 'Semaphore'ではなく' Event'であるのはなぜですか? – eigenein
[Semaphore、SemaphoreSlim、ReaderWriterLock、ReaderWriterLockSlim、ManualResetEvent、ManualResetEventSlim、AutoResetEvent、CountdownEvent、Interlocked、Mutexなどの同期プリミティブを参照してください(http://msdn.microsoft.com/en-us/library/system.threading.aspx ) –