boost::线程分段错误

boost::thread segmentation fault

本文关键字:错误 分段 线程 boost      更新时间:2023-10-16

我有Runnable类。其中,我使用以下函数来启动新线程:

      start()
      {
           status_ = RUNNING;
            mythread_ = boost::thread(boost::ref(*this)); // Line 2
      }

我有从Runnable派生的Controller类。我想使用start()函数为Controller创建线程

因此,在控制器启动功能中,

我使用:

controller_->start()

创建一个新线程;

但这最终导致了2号线的分段故障。

你知道可能出了什么问题吗?

我记得有时没有为编译器指定线程库会导致segfault。如果您使用的是unix,请尝试在编译器中添加-phread参数。不过,在最新的linux/boost/gcc上似乎不再需要它了。

对象的地址只能在成员函数中作为this指针使用,并且this的大多数使用都是隐式的。

或者,您可以制作类的start()函数friend,并直接将对象的引用发送到新线程。