为啥分离线程没有输出消息?

Posted

技术标签:

【中文标题】为啥分离线程没有输出消息?【英文标题】:why does detach thread get no output message?为什么分离线程没有输出消息? 【发布时间】:2019-11-21 09:01:23 【问题描述】:

我正在测试如下的 cpp 代码,并得到一个非常令人困惑的现象,下面的代码不打印“标签”字符串。谁能解释一下?非常感谢您的帮助!

class Data 
public:
  Data()  std::cout << __FUNCTION__ << std::endl; 
  ~Data()  std::cout << __FUNCTION__ << std::endl; 
  void show()  std::cout << label << std::endl; 

private:
  std::string label"label";
;

int main() 
  auto data = std::make_shared<Data>();
  std::thread t([=]() mutable
    data->show();
  );

  t.detach();

【问题讨论】:

没有什么能阻止你的程序在线程有时间运行之前退出。 是的,我知道使用 join() 可以获得正确的结果,但我只是想了解如果使用 detach() 会发生什么,为什么没有输出了。 【参考方案1】:

正如 Mat 在评论部分已经提到的,没有什么可以阻止程序在线程开始之前结束。

t.detach() 更改为t.join()

来自cppreference join

等待线程完成其执行

【讨论】:

谢谢。是的,我使用 detach() 的原因是试图理解分离效果。我知道我可以使用 join() 来获得正确的结果。

以上是关于为啥分离线程没有输出消息?的主要内容,如果未能解决你的问题,请参考以下文章