【问题标题】:Is it possible to get a thread object for the main thread, and `join()` with it?是否有可能为主线程获取一个线程对象,并与它进行 `join()`?
【发布时间】:2015-01-05 15:15:24
【问题描述】:

有没有办法像使用 C++11(或更高版本)设施的任何其他线程一样处理主线程? 具体来说,我正在寻找的是join() 与主线程的能力。所以,基本上,我想做类似:main_thread.join(),但不知道如何获取main_thread 对象。

线程构造函数似乎没有提供任何基于使用get_id() 获得的线程ID 的功能。 this_thread 命名空间也只提供了最少的功能,但缺少例如 join(),这正是我正在寻找的。​​p>

【问题讨论】:

  • 通常你从主线程开始一个线程,然后加入()你开始的线程..而不是相反。
  • std::thread::join 方法适用于 c++11。有什么问题?
  • 呃...如果你想加入主线程,那么结束当前线程到底有什么区别?这不像你会继续下去;当主线程结束时,程序就结束了。
  • 我需要能够做到main_thread.join()。就我而言,主线程就像任何其他线程一样,一点也不特别。每个线程都在运行任意用户代码,需要能够调用join()
  • main 退出时,所有其他线程都被销毁。根据定义,主线程“就像任何其他线程一样”。

标签: c++ multithreading c++11


【解决方案1】:

正如@molbdnilo 和@yohjb 在cmets 中所指出的(另请参见What happens to a detached thread when main() exits?),C++11 语义表示所有线程都在main() 函数终止时结束。 由于 C++11 没有 pthread_exit() 等效项,因此无法加入主线程,因为程序无论如何都会结束。

所以,要回答我的问题,这似乎是不可能的,而且使用 main() 的终止语义,它不会很有用。

【讨论】:

  • 仅供参考,这不需要是社区维基!这是一个完全合理的问题和答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 2018-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多