【问题标题】:use boost::thread to run a functor but destructor is wrongly called使用 boost::thread 运行仿函数,但错误地调用了析构函数
【发布时间】:2017-12-06 21:14:36
【问题描述】:

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

【问题讨论】:

    标签: c++ multithreading boost destructor


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-16
      • 2013-08-18
      • 2020-08-22
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      相关资源
      最近更新 更多