尝试加入非终止线程后调用函数

时间:2017-06-15 18:14:06

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

此代码应产生无限循环。

我无法在GCC或Ideone中重现:

enter image description here

但是,如果使用优化标志进行编译,则编译器会删除不执行任何操作的while循环,这解释了行为。阅读Nathan Oliver提供的Optimizing away a "while(1);" in C++0x中的更多内容。