c++ thread join方法卡住,进行不了下一步操作

cytheria43 2020-07-16 12:05:25
void sub_thread()                   //在该子线程里开启子线程列表
{
list<thread* > thread_list;
while(1)
{
等待接受信号:xxx
if(xxx==stop)
{
for(auto t:thread_list)
{
t->join() // 在这里卡住,走不到下一步
下一步操作
}
}else
{
thread_list.push_back(new thread(...)); //j加入新线程
}
}
}

int main()
{
while(1)
{
等待接受信号:xxx
thread th(sub_thread()); //开启线程,并独立出来
th.detach();
}
}
...全文
4025 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2021-05-07
  • 打赏
  • 举报
回复
你的做法就是错误的,正常做法应该是开启一个多线程,join的含义是阻塞等待多线程的函数结束。尽量不要detach,含义是你放弃了控制的权利,有可能多线程还没有执行完毕就被强杀进程,如果有BUG,join下的表现就是卡死等待。 void fun() { dosomething()}; t.join(); 执行下一步的前提条件是fun执行完毕
NorZ 2021-05-07
  • 打赏
  • 举报
回复
你 thread list 里面的线程是否有推出条件?sub_thread 收到信号,只是开始 join,join本身就是阻塞设计,需要等线程 t 退出循环。所以需要查看你的线程 t (们)是否满足了退出条件
flying_music 2021-05-06
  • 打赏
  • 举报
回复
引用 2 楼 cytheria43 的回复:
哦哦 我题目没说清楚,在收到stop信号时线程里会自动停止,但是停止了,join方法还是阻塞的,而且(假设main里开启了两个独立的sub_thread)sub1阻塞在join()这里,sub2也会被阻塞,就是没搞懂里面什么原理
线程嵌套线程?父线程detach,子线程join?为什么会有这种奇葩设计呢?
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
cytheria43 2020-07-16
  • 打赏
  • 举报
回复
哦哦 我题目没说清楚,在收到stop信号时线程里会自动停止,但是停止了,join方法还是阻塞的,而且(假设main里开启了两个独立的sub_thread)sub1阻塞在join()这里,sub2也会被阻塞,就是没搞懂里面什么原理
Simple-Soft 2020-07-16
  • 打赏
  • 举报
回复
join就是等待线程结束

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧