私はマルチスレッドアプリケーションを持っていますが、10秒後にウェイクアップして何らかの作業を行うと想定される1つのスレッドが、スリープから復帰しないか、飢えている場合があります。
それは散発的にのみ発生します。
//ACE task svc method
int svc (void)
{
while(true)
{
ACE_DEBUG((MY_INFO "sleep\n"));
sleep(10);
ACE_DEBUG((MY_INFO "awake for HB\n"));
_csender.sendHeartBeat();
}
return 0;
}
ログの最後の行は次のとおりです。2012-06-1211:34:20.807272 | INFO | sleep
スレッドは15秒間アウェイクしなかったか、アウェイク後15秒まで何の作業も行わなかったため、アプリケーションは閉じました。
アプリケーションには合計6つのスレッドがあり、すべて同じ優先度で開始されます。スレッドの1つは非常にビジーで、大量の市場データを受信して処理しますが、ソケットには何も送信しません。上記のスレッドはデータを送信する唯一のスレッドであり、受信側スレッドと送信側スレッドの両方が同じソケットオブジェクトを共有しています。
これはRedHatLinux5.3にあります。
問題になる可能性のあるアイデアはありますか?