1

特定のソケットで send() を使用して関数を呼び出す 2 つのスレッドを同期する必要がある場合、send() 関数のクリティカル セクションをワープするか、ミューテックスの使用を検討する方が便利でしょうか? (ソケットはカーネルオブジェクトであるため)

4

3 に答える 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 に答える