我有一个应用程序有一个主线程产生另一个线程,该线程为每个收到的请求生成线程,并且我可能因为死锁而获得核心转储。在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
我不会忽视任何信号。
这可能是什么问题?
答案 0 :(得分:0)
pthread_detach手册告诉我们:
尝试分离已经分离的线程会导致未指定的行为。
但是,您创建的线程与启动时分离。
您期望得到什么结果?