【发布时间】:2013-02-26 01:51:41
【问题描述】:
我正在使用 Visual Studio 2012 和 C++11。我不明白为什么这不起作用:
void client_loop(bool &run)
{
while ( run );
}
int main()
{
bool running = true;
std::thread t(&client_loop,std::ref(running));
running = false ;
t.join();
}
在这种情况下,线程t 的循环永远不会结束,但我明确地将running 设置为false。 run 和 running 具有相同的位置。我试图将running 设置为单个全局变量,但没有任何反应。我也尝试传递一个指针值,但什么也没有。
线程使用相同的堆。我真的不明白。谁能帮帮我?
【问题讨论】:
-
您的程序过早终止,无法观察到任何有趣的事情。
-
不,我忘了在这个例子中写“t.join()”.. :)
-
如果将
running设置为volatile会怎样? -
@didierc:如果他将它设置为
volatile,他可能会被欺骗以为他有工作代码。 Microsoft 定义了volatile,所以它可以工作,但标准不需要它。 -
@JerryCoffin thx,我想我之前的某个时候弄错了。我的立场是正确的。
标签: c++ multithreading c++11 heap-memory std