特定のソケットで send() を使用して関数を呼び出す 2 つのスレッドを同期する必要がある場合、send() 関数のクリティカル セクションをワープするか、ミューテックスの使用を検討する方が便利でしょうか? (ソケットはカーネルオブジェクトであるため)
3 に答える
4
Windows プラットフォームを想定しています (ここで、クリティカル セクションとミューテックスのどちらかを選択できます)。
Mutex (of CreateMutex
) はかなり遅いです: 競合がなくても、ロックとロック解除は常にシステム コールです。ただし、のコストはsend
、この違いを目立たなくするのに十分である可能性があります。
別の回答で指摘されているように、ミューテックスはプロセス間で共有でき(名前付き/再オープンまたは継承されている場合)、クリティカルセクションはプロセスローカルです。
于 2013-01-16T13:43:53.713 に答える
1
これはWindowsに関するものだと思います(他の場所でクリティカルセクションを見たことを思い出せません)。
すべてのロックが 1 つのプロセス内にある場合は、どの同期オブジェクトを使用してもかまいません。プロセスの境界を越えてロックする場合は、ミューテックスを使用する必要があります。クリティカル セクションは単一のプロセス内でのみ機能しますが、名前付きミューテックスは多くのプロセス間で共有できるためです。
于 2013-01-16T13:40:06.550 に答える
-2
ミューテックスはもっと速く動くはずだと思います。
于 2013-01-16T13:36:49.547 に答える