我有一个简单的程序,它使用 boost 库在 1 秒内输出递增的整数:
#include <iostream>
#include <boost/thread/thread.hpp>
#include <boost/asio.hpp>
using namespace std;
void func1(bool* done)
{
float i=0;
while (!(*done))
{
cout << i << " ";
i++;
}
return;
}
void timer(bool* done, boost::thread* thread)
{
boost::asio::io_service io;
boost::asio::deadline_timer timer(io, boost::posix_time::seconds(1));
timer.wait();
*done = true;
return;
}
int main()
{
bool done = false;
boost::thread thread1(func1, &done);
boost::thread thread2(timer, &done, &thread1);
thread2.join();
thread1.join();
}
该代码的迭代有效,但是我最初将主函数中定义的 bool 通过引用传递给函数 func1 和线程。IE:
void func1(bool& done) /*...*/ while (!(done))
/* ... */
void timer(bool& done, boost::thread* thread) /*...*/ done = true;
带有线程定义:
boost::thread thread1(func1, done);
boost::thread thread2(timer, done, &thread1);
当我这样执行它时, func1() 中的循环永远不会终止!我在 timer() 的返回处添加了一个断点,并且我的 IDE (MS VC++ express 2010) 表明 bool done 的值确实为 true,即使在 func1() 中也是如此。
关于为什么会发生这种情况的任何见解?