我知道join方法阻塞当前线程并等待任务完成。那么我怎么可能做这样的事情:
void task()
{
while(true)
{
//do stuff
}
}
int main()
{
std::thread t1(task);
t1.join();
std::cout << "HELLO" << std::endl;
}
执行此代码后仍然看到“HELLO”。为什么这样做?
答案 0 :(得分:0)
此代码应产生无限循环。
我无法在GCC或Ideone中重现:
但是,如果使用优化标志进行编译,则编译器会删除不执行任何操作的while循环,这解释了行为。阅读Nathan Oliver提供的Optimizing away a "while(1);" in C++0x中的更多内容。