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

Invoking function after trying to join a non-terminating thread

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

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

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

并且在执行此代码后仍然看到 "HELLO"。为什么这样做有效?

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

我无法在 GCC 或 Ideone 中复制:

但是,如果您在启用优化标志的情况下进行编译,那么什么都不做的 while 循环可能 会被编译器移除,这就解释了这种行为。在 Nathan Oliver 提供的 Optimizing away a "while(1);" in C++0x 中阅读更多内容。