SetEventはアトミックですか?
-
06-07-2019 - |
質問
2つ以上のスレッドがクリティカルセクションによって保護されていない同じイベントハンドラーでWin32 APIのSetEventを呼び出すことは安全ですか?
解決
安全ですが、1つのスレッドがそれを設定し、別のスレッドが同時に設定した場合、2つの通知を受け取ることはありません。 2つ目はTrueから... Trueに変更したためです。これが心配な場合は、代わりにセマフォを使用してください。
他のヒント
複数のスレッドが同じイベントを待機していて、同じコードを実行していると仮定します。
- コードが処理を完了するまでイベントをクリアしない場合、事実上CSがあります。イベントはクリアされるまで(つまり、自動リセットではない)シグナル状態のままなので、複数のスレッドにシグナルを送ると、CPUをスピンする以外は何もしません。
- 処理の開始時にコードがそれをクリアするか、イベントがautorsetである場合、同じ関数を実行する複数のスレッドが存在することになり、これらのスレッドが何かを共有する場合は安全ではありません。
複数のスレッドからSetEventを呼び出す際の制限はありません。
所属していません StackOverflow