我有一個應用程序有一個主線程產生另一個線程,它爲每個收到的請求產生線程,我得到一個核心轉儲可能是由於死鎖。上的gdb我看到以下內容:產卵線程時死鎖?
__lll_lock_wait_private();
_L_lock_4714();
start_thread();
clone();
這是從下面的代碼樣品產生:
do
{
pthread_t handle;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&handle, 0, run, msg);
pthread_detach(handle);
} while (!stop)
運行是一個外部功能,而代碼的其餘部分是類方法的一部分。
void* run(void* arg)
{
Handler handler;
Msg* msg = static_cast<Msg*> (arg);
handler.handleMsg(msg);
return NULL;
}
handleMsg方法進行一些處理,然後調用另一個應用程序通系統調用:
...
system("AnotherApplication param1, param2 &");
...
注意符號。這是有意的,因爲我希望進程異步運行。響應通過另一種類型的通信進入主線程。
此應用程序已經在Linux上運行:
的Linux 2.6.32-358.14.1.el6.x86_64#1 SMP週一6月17日15時54分二十秒EDT 2013 x86_64的x86_64的x86_64的GNU/Linux的
我不會忽略任何信號。
這裏有什麼問題?
這是字面上你的線程啓動循環?儘可能多地旋轉*,儘可能快*直到局部變量變爲真(它可能永遠不變)? – WhozCraig
您是否檢查任何這些調用的返回碼並將它們回覆或記錄在某處? – Duck