問題タブ [resetevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ロックコンテキストの SignalAndWait
スレッドプールのタスクを生成するマネージャー クラスがあり、各スレッドは終了後にコールバックを行うことになっています。
ロックを使用して変数とフィールドを処理し、シグナルを使用してスレッド間通信を処理します。私が探しているのは、現在の lock() を終了し、SignalAndWait のような信号をアトミックに待つ方法ですが、locks() の場合です。
コードは次のようになります。
ここでの問題は、.WaitOne() が lock() を終了しないため、コールバックを実行するスレッドがデッドロックすることです。
私は WaitOne(Int32, bool exitContext) に大きな期待を寄せていましたが、そのコンテキストは同期ではなくリモート処理などに関するものであるようです。
c# - 両方ともWaitOne()を呼び出し、AutoResetEventによって解放されたときに、2番目のスレッドが最初のスレッドの前に解放されるのはなぜですか?
ThreadAとThreadBの両方WaitOne()
が同じAutoResetEventでこの順序で呼び出すと仮定します。イベントが設定されている場合、なぜThreadAではなくThreadBがリリースされるのですか?
複数のスレッドが待機しているAutoResetEventを設定するとどうなるかを調べるために、テストを実行しました。
もちろん、このコードは役に立ちません。ミッキーマウスの例です。そして、これは重要/緊急ではありません。しかし、とにかくもっと知りたいと思います...
c# - 複数のパブリッシャーから 1 つのサブスクライバーへの C# イベント
2 つのイベント ハンドラーを持つコードがあります。これら 2 つのイベント ハンドラーが、実行すべき作業があることを別のメソッドに通知するようにします。
私は ManualResetEvent を使用してこれを実装しましたが、これが私が望むものを達成するための最良の方法であるかどうか、またはより良い方法があるかどうかはわかりません。
私が持っている最も重要な質問の 1 つは、次のとおりautoEvent.WaitOne()
です。その間、別のイベントがトリガーSet()
され、genericHandler がWaitOne()
再び到達する前に呼び出されます。WaitOne に再び到達したとき、別の を待つか、またはに到達する前に a が呼び出されSet()
た場合は続行しますか?Set()
WaitOne()
これは、C# で複数のパブリッシャーと 1 つのサブスクライバー パターンを実装するための最良の方法ですか? または、ManualResetEvent の代わりに別のものを使用する必要がありますか?
注: Event1 と Event2 の優先度が異なるため、genericHandler は別のスレッドにあるため、ハンドラでは、Event2 を確認する前に、Event1 に保留中の作業があるかどうかを確認します。