[英]Deadlock when spawning threads?
我有一個具有一個主線程的應用程序,該應用程序產生了另一個線程,該線程又為接收到的每個請求產生了線程,並且可能由於死鎖而導致發生核心轉儲。 在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)
run是一個extern函數,而其余的代碼是類方法的一部分。
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 Mon Jun 17 15:54:20 EDT 2013 x86_64 x86_64 x86_64 GNU / Linux
我不會忽略任何信號。
這可能是什么問題?
pthread_detach手冊通知我們:
嘗試分離已經分離的線程會導致未指定的行為。
但是,您正在創建的線程與啟動時是分離的。
您期望得到什么結果?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.