gpt4 book ai didi

c++ - 产生线程时死锁?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:09 25 4
gpt4 key购买 nike

我有一个应用程序,它有一个主线程,该线程生成另一个线程,该线程为收到的每个请求生成线程,我得到一个核心转储可能是由于死锁。在 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 是一个外部函数,而其余代码是类方法的一部分。

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 手册告诉我们:

Attempting to detach an already detached thread results in unspecified behavior.

但是,您正在创建从一开始就分离的线程。

您期望得到什么结果?

关于c++ - 产生线程时死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com