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

2024-01-24

之间有什么不同join() and detach()在C++中的多线程中? 做join()杀死线程?


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

When thread::join()被调用时,调用线程将阻塞,直到执行线程完成。基本上,这是一种可用于了解线程何时完成的机制。什么时候thread::join()返回,操作系统线程执行完成,C++thread对象可以被破坏。

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

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

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

  • 默认构造的thread对象不代表执行线程,因此不可连接。
  • 已移出的线程将不再代表执行线程,因此不可加入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中多线程的 join() 和 detach() 有什么不同? 的相关文章

随机推荐