C++11 多线程 : State of thread after execution

标签 c++ multithreading c++11

线程执行完成后的状态是什么?

是执行完立即销毁还是随父线程一起销毁?

最佳答案

std::thread 对象不同于底层控制线程(尽管它们应该一对一映射)。

这种分离非常重要,它意味着 std::thread 和控制线程可以有不同的生命周期。例如,如果你在堆栈上创建你的 std::thread,你真的需要在你的对象被销毁之前调用 thread::detach(如果你没有析构函数将调用 terminate )。此外,正如 Grizzly 指出的那样,您可以在对象销毁之前调用 .join(),这将阻塞直到线程执行完成。

这也回答了您的问题 - std::thread 对象在线程完成后不会被销毁 - 它的行为与所有其他 C++ 对象一样 - 当它超出范围时将被销毁(或被删除)。

关于C++11 多线程 : State of thread after execution,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18869373/

相关文章:

c++ - 即使通过 const_cast 更改 const 变量后也能获得相同的值

c# - 为什么 SynchronizationContext.Current 为空?

c++ - 在类中启动的第二个线程中的 OpenGL

java - 线程本地间歇性返回 null

c++ - unique_ptr 没有操作删除

c++ - const、span 和迭代器问题

c++ - 替换(或重新实现?)std::function 用于一些统计和测试

c++ - 包含 C++ 库的 R 包无法为窗口构建

c++ - C++ 服务的 mod_gsoap 错误

c++ - 如何在 Mixin 类中按类型返回组件?