2

クリティカル セクションで保護されていない同じイベント ハンドラーで、2 つ以上のスレッドが Win32 API の SetEvent を呼び出すのは安全ですか?

4

3 に答える 3

1

安全ですが、1 つのスレッドがそれを設定し、別のスレッドが同時にそれを設定した場合、2 つの通知を受け取ることはなく、1 つだけであることを覚えておいてください。2番目のものはTrueから... Trueに変更したためです。これが心配な場合は、代わりにセマフォを使用してください。

于 2009-05-26T17:57:48.253 に答える
0

同じイベントを待っている複数のスレッドがあり、同じコードを実行しているとします。

  1. 処理が完了するまでコードがイベントをクリアしない場合は、実質的に CS を持っています。イベントはクリアされるまで(自動リセットではなく)シグナル状態のままであるため、複数のスレッドにシグナルを送信しても、CPU をスピンさせる以外は何もしません。
  2. コードが処理の開始時にそれをクリアするか、イベントが autorset である場合、複数のスレッドが同じ関数を実行することになり、これらのスレッドが何かを共有すると安全ではなくなります。
于 2008-11-05T14:03:40.723 に答える