簡體   English   中英

生成線程時出現死鎖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM