我有一个应用程序有一个主线程产生另一个线程,它为每个收到的请求产生线程,我得到一个核心转储可能是由于死锁。上的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