使用boost :: thread来运行一个仿函数,但是错误地调用了析构函数

时间:2017-07-03 14:37:39

标签: c++ multithreading boost destructor

我使用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)),一切似乎都运行良好。提前谢谢。

1 个答案:

答案 0 :(得分:0)

boost::thread复制参数并将副本传递给线程函数或函数对象的operator()

如果您需要传递参考,请像现在一样使用boost::ref