【发布时间】:2019-04-15 20:38:33
【问题描述】:
一个典型的工作线程是这样的:
std::thread t([](){
....
});
t.join();
有没有办法从线程函数内部分离线程(因此join 应该返回)?所以线程被“分离”了,t.join()之后的代码继续运行,线程函数也继续运行。
我可以在 Windows 中使用 SetEvent 执行此操作,但我正在寻找标准解决方案。
【问题讨论】:
-
通常的方法是直接调用
t.detach()而不是t.join()。如果你真的想要,你可以在线程中创建另一个线程并将其分离并让中间线程退出...... -
为什么不直接调用
detach而不是join?另外,在detach之后调用join会抛出异常 -
这看起来像是一个 XY 问题。通常线程不应该被分离,绝对不应该尝试从父线程中“逃脱”。
-
作为一种解决方法,您可以从您的线程启动另一个线程并从中分离。
-
调用
t.detach()或t.join()始终应由创建线程t的任何函数负责。
标签: c++ multithreading c++11