产生线程时死锁?

时间:2013-12-11 00:04:39

标签: c++ linux multithreading pthreads

我有一个应用程序有一个主线程产生另一个线程,该线程为每个收到的请求生成线程,并且我可能因为死锁而获得核心转储。在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

我不会忽视任何信号。

这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

pthread_detach手册告诉我们:

  

尝试分离已经分离的线程会导致未指定的行为。

但是,您创建的线程与启动时分离。

您期望得到什么结果?

相关问题