我使用boost :: thread来运行仿函数。我想在主线程中看到对象 a 的析构函数被调用两次。但是,有时,我发现析构函数在主线程中调用一次,在调用的线程中调用一次。 A类做了一些复杂的事情,因此这种现象并不总是发生。任何人都知道如何发生这种情况?
int main()
{
A a; // A is a functor
boost::thread myThread(a);
while (true)
{
// sleep every second until interruption caught
}
myThread.interrupt();
myThread.join();
}
顺便说一下,我现在使用boost :: thread myThread(boost :: ref(a)),一切似乎都运行良好。提前谢谢。
答案 0 :(得分:0)
boost::thread
复制参数并将副本传递给线程函数或函数对象的operator()
。
如果您需要传递参考,请像现在一样使用boost::ref
。