Condition
Java では、複数のオブジェクトを 1 つの に関連付けることができますReentrantLock
。C#に相当するものは何ですか?
実際の例: JavaCondition
ドキュメントの実装例では、同じロックに結び付けられたとの 2 つのCondition
オブジェクトを使用しています。その例をどのように C# に変換できますか?notFull
notEmpty
背景Condition
: 2 つのオブジェクトを使用して、同じオブジェクトに関連付けられたさまざまな状態を通知するJava コードをよく見かけますLock
。C#では、次のいずれかができるようです
Monitor.Enter
オブジェクトを呼び出してからMonitor.WaitOne
/を呼び出しますMonitor.Pulse
が、これは 1 つの条件にすぎません。- 複数の
Auto/ManualResetEvent
オブジェクトを使用しますが、これらは待機後に特定のロックをアトミックに再取得できません。
注: 1 つの方法を考えることができます:単一のオブジェクトでMonitor.WaitOne
/を使用し、ウェイクアップ後に状態をチェックします。Monitor.PulseAll
これは、偽のウェイクアップから保護するために、Java でも行うことです。ただし、別の条件で待機しているスレッドを起動する可能性があるため、PulseAll
の代わりに呼び出す必要があるため、実際にはそうではありません。残念ながら、代わりに使用すると、パフォーマンスに影響があります (スレッドが同じロックを求めて競合します)。Pulse
Pulse
PulseAll
Pulse