私はネットワークアプリケーションを書いています。スレッドの競合状態に関していくつかの問題があります。
「cd」はソケット記述子です。私のスレッドの1つがソケット記述子を取得し、ソケットを介してデータを送信します。
map_sdが5を返すとします。ただし、別のスレッドがソケット5を閉じて、別のスレッドを再割り当てする場合があります。プログラムのロジックを破壊します。
// wait until there is valid descriptor mapping
while( !(cd = map_sd( sd )) ){
sleep(1);
}
// forward PAYLOAD header
if( send(cd, &payload, sizeof(PAYLOAD), MSG_NOSIGNAL) < 0 ){
printf("send fail 813\n");
}
Linuxでpthreadライブラリを使用しているときに、上記のコードを「アトミック」にするにはどうすればよいですか?
前もって感謝します。