【问题标题】:Invoking function after trying to join a non-terminating thread尝试加入非终止线程后调用函数
【发布时间】:2017-11-18 08:18:54
【问题描述】:

我知道 join 方法会阻塞当前线程并等待任务完成。那么我怎么可能做这样的事情:

void task()
{
   while(true)
   {
       //do stuff
   }
}

int main()
{
   std::thread t1(task);
   t1.join();
   std::cout << "HELLO" << std::endl;
}

执行此代码后仍会看到“HELLO”。为什么会这样?

【问题讨论】:

  • 这里基本在问答中回答:stackoverflow.com/questions/3592557/…
  • 您使用的是哪个编译器?我试过你的代码,我有一个使用 Clang 的无限循环。
  • g++ 无限循环
  • g++ 5.4.1 的无限循环

标签: c++ multithreading loops return infinite-loop


【解决方案1】:

这段代码应该会产生一个无限循环。

我无法在 GCC 或 Ideone 上重现:

但是,如果您在启用优化标志的情况下进行编译,则编译器可能会移除不执行任何操作的 while 循环,这会解释该行为。在 Optimizing away a "while(1);" in C++0x 中阅读更多信息,由 Nathan Oliver 提供。

【讨论】:

  • 这是否意味着在适当的情况下它应该卡在while循环中,对吧?
  • 是的@U.Iee,它应该产生一个无限循环。
  • 好的。我得到了它。但这是否意味着如果我想使用线程,我应该只在 main 中调用 join() 方法,让我们说什么都不做?
  • @U.Iee 当你需要线程终止时,你可以在main()中调用join()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
相关资源
最近更新 更多