gpt4 book ai didi

c++ - C++ 中多线程的 join() 和 detach() 有什么不同?

转载 作者:IT老高 更新时间:2023-10-28 22:08:18 40 4
gpt4 key购买 nike

join()detach() 在 C++ 中的多线程中有何不同?join() 会杀死线程吗?

最佳答案

一个 C++ thread 对象通常(但不总是)表示一个执行线程,这是一个操作系统或平台概念。

当调用thread::join() 时,调用线程将阻塞,直到执行线程完成。基本上,这是一种可以用来知道线程何时完成的机制。当 thread::join() 返回时,OS 线程执行完毕,C++ thread 对象可以被销毁。

当调用 thread::detach() 时,执行线程从 thread 对象中“分离”,不再由 表示thread 对象——它们是两个独立的东西。 C++ thread 对象可以被销毁,操作系统线程可以继续执行。如果程序需要知道执行线程何时完成,则需要使用其他机制。 join() 不能再对该 thread 对象调用,因为它不再与执行线程相关联。

在 C++ thread 对象仍然“可连接”时销毁它被认为是错误的。也就是说,为了销毁 C++ thread 对象,需要调用(并完成)join() 或必须调用 detach()叫。如果 C++ thread 对象在被销毁时仍然可以连接,则会抛出异常。

C++ thread 对象不代表执行线程的其他一些方式(即,可以是不可连接的):

  • 默认构造的 thread 对象不代表执行线程,因此不可连接。
  • 已从中移出的线程将不再代表执行线程,因此不可加入。

关于c++ - C++ 中多线程的 join() 和 detach() 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37015775/

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