10

Monitor.EnterMonitor.Exit同じスレッドから呼び出されるように設計されています。しかし、取得したスレッドとは別のスレッドでロックを解放する必要がある場合はどうすればよいでしょうか?

例: 共有リソースと、このリソースを使用する非同期操作があります。操作はBeginOperation、共有リソースのロックを開始して取得します。EndOperationロックを解除する方法もあります。EndOperation通常、コールバックから別のスレッドで呼び出さMonitor.Exitれるため、EndOperationメソッドで呼び出すことはできません。この場合の最善のアプローチは何ですか?良い解決策ではAutoResetEventなく、 でロックを再確認しますか?Monitor

4

3 に答える 3

13

探しているプリミティブはセマフォと呼ばれ、あるスレッドで安全に入力し、別のスレッドから終了できます。

于 2012-06-12T17:33:45.747 に答える
7

.NET 4.0 を使用できる場合は、それをSystem.Threading.Semaphoreに置き換えることができます。これにより、あるスレッドで許可を取得し、別のスレッドで許可を解放できます。

Semaphore クラスは、WaitOne または Release の呼び出しにスレッド ID を適用しません。

于 2012-06-12T17:33:23.067 に答える
4

外部イベントがトリガーされるまで、広告をブロックするために使用されます。MSDN ドキュメント:

http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx

于 2012-06-12T17:34:28.540 に答える