1

SetEvent() と Thread Lock() 関数の違いは何ですか? 誰でも私を助けてください

4

2 に答える 2

0

イベントは、特定のタスクが完了したら処理を開始/続行したい場合、つまりそのイベントが発生するまで待ちたい場合に使用されます。他のスレッドは、 を使用して、待機中のスレッドにこのタスクの完了を通知できますSetEvent

一方、クリティカル セクションは、一度に 1 つのスレッドのみがコード ブロックを実行するようにする場合に使用されます。つまり、その時点で他のスレッドが状態を変更することなく、1 つのスレッドによって一連の命令を実行する必要がある場合です。たとえば、複数のステップを含むリンク リストにアイテムを挿入するときに、別のスレッドが来て、リストにもう 1 つのオブジェクトを挿入しようとするのは望ましくありません。したがって、最初のスレッドがクリティカル セクションの使用を終了するまで、他のスレッドをブロックします。

于 2012-07-09T04:10:33.727 に答える
0

イベントは、プロセス間通信、つまり異なるプロセス間でアクティビティを同期するために使用できます。これらは通常、アクティビティの発生を「通知」するために使用されます (たとえば、ファイルの書き込みが終了しました)。イベントの詳細: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686915%28v=vs.85%29.aspx

クリティカル セクションは、スレッドを同期するプロセス内でのみ使用でき、基本的なロック/ロック解除の概念を使用します。これらは通常、マルチスレッド アクセス (変数など) からリソースを保護するために使用されます。それらは (CPU の観点から) 使用するのに非常に安価です。プロセス間バリアントは、Windows では Mutex と呼ばれます。詳細: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682530%28v=vs.85%29.aspx

于 2012-07-09T14:24:05.533 に答える