6

複数のターゲットにudpパケットを送信し、同じソケットでそれらすべてから応答を受信する単一の非ブロッキングソケットがあります。専用スレッドで読み込んでいますが、書き込み (sendto) は複数の異なるスレッドから発生する可能性があります。

これは追加の同期なしで安全ですか? ミューテックスを保持しながら書き込む必要がありますか? または、書き込みは同じスレッドから行う必要があり、キューが必要ですか?

4

2 に答える 2

8

カーネルは、基になるファイル記述子へのアクセスを同期するため、別のミューテックスは必要ありません。TCP を使用している場合、このアプローチには問題がありますが、UDP について話しているので、必ずしも最善の方法ではありませんが、これは安全なはずです。

于 2012-06-26T17:36:33.173 に答える
-1

単一または複数のスレッドからソケットに書き込むことができます。複数のスレッドからソケットに書き込む場合は、ミューテックスと同期する必要があります。代わりに、スレッドがメッセージをキューに配置し、単一のスレッドがキューからプルして書き込み、読み取り、およびキューからの書き込みを行う場合は、ミューテックスによって保護する必要があります。

異なるスレッドから同じソケットへの読み取りと書き込みは、互いに干渉しません。

于 2012-06-26T17:20:17.213 に答える