2

私のマルチスレッド アプリケーションでは、AF_UNIX タイプのソケットを使用しています。デフォルトではブロックされているようです。問題は、「ブロック」とはどういう意味ですか? アプリケーションで、または呼び出しまたはすべてのスレッドを実行するときにスレッドをブロックしますか( do のように)?::recv::sendfgets

すべてのスレッド/アプリケーション全体をブロックする場合、非ブロックソケットを使用する必要があると思いますか? その場合、AF_UNIX ノンブロッキング ソケットの設定方法と、いつノンブロッキング モードを設定する必要があるか (およびその方法) の良い例を教えてください。どうやって::recv?ありがとう。

4

2 に答える 2

5

呼び出しをブロックすると、スレッドは操作が完了するまで待機します。操作が完了する前にスレッドを続行できない場合に使用します。たとえば、受信する入力へのデータ依存性が原因です。

非ブロッキング呼び出しは、情報が送信用にバッファリングされるか、読み取り操作が開始されるとすぐに戻ります。データの依存関係がない場合に使用します。

一般に、ブロッキングは常に「プロセス内のすべてのスレッドをブロックする」のではなく、「現在のスレッドをブロックする」ことを意味します。

于 2012-06-09T13:32:40.230 に答える
4

recv呼び出しを行うスレッドのみをブロックします。

于 2012-06-09T13:27:23.277 に答える