C++ boost线程错误

C++ boost线程错误,c++,boost-thread,C++,Boost Thread,我有一个使用boost线程的程序。该程序具有启动和停止功能。当程序启动时,我创建了一个执行一些处理的boost线程。当程序停止时,我在此线程上调用join并删除该线程的指针。我的程序第一次正确启动和停止;然而,当我第二次尝试启动我的程序时,我在boost中的一个断言失败了(当更新处理线程时),下面是我屏幕上的输出 /root/src/boost.cmake/libs/thread/src/pthread/once.cpp:46: unsigned long &boost::detail:

我有一个使用boost线程的程序。该程序具有启动和停止功能。当程序启动时,我创建了一个执行一些处理的boost线程。当程序停止时,我在此线程上调用join并删除该线程的指针。我的程序第一次正确启动和停止;然而,当我第二次尝试启动我的程序时,我在boost中的一个断言失败了(当更新处理线程时),下面是我屏幕上的输出

/root/src/boost.cmake/libs/thread/src/pthread/once.cpp:46: unsigned long &boost::detail::get_once_per_thread_epoch(): Assertion`!pthread_setspecific(epoch_tss_key,data)' failed.
我知道我的联接工作正常,因为当处理线程退出时,我会向控制台输出一条消息。有人知道为什么会这样吗

一个额外的注意。。。我对我的代码做了一点修改,我用来清理boost线程的方法在我程序的其他部分似乎也适用(例如,如果我在父类中创建boost::thread)。但是,它在子类(抽象类)中每次都失败

我的启动和停止方法如下所示

 void ThreadMethod()
    {
      while(_runningThread)
      {
      }
    }
 void Start()
   {
     _runningThread = true;
     _thread = boost::make_shared<boost::thread>(&TestChildVirtualClass::ThreadMethod, this);
   };
   void Stop()
   {
     _runningThread = false;
     _thread->join();
     if( _thread )
     {
       _thread.reset();
     }
   };
void ThreadMethod()
{
while(_runningThread)
{
}
}
void Start()
{
_runningThread=true;
_thread=boost::make_shared(&TestChildVirtualClass::ThreadMethod,this);
};
无效停止()
{
_runningThread=false;
_线程->连接();
如果(_线程)
{
_thread.reset();
}
};

但是,我在测试程序中重新创建此问题时遇到困难(尽管它在我的实际程序中每次都会发生)。

此错误可能是Boost.Thread上的错误,因为call_once实现中存在一些漏洞(#5752 Boost::call_once()在某些平台上不可靠-请参阅)。这当然取决于运行程序的平台

当然,我可能错了


您还应该保护对_runningThread的访问。

调试程序,并在问题中引用的代码上设置断点。似乎每个线程都应该调用一次,所以第二次调用应该能够识别您的问题。成功的连接意味着线程已经完成了执行。要再次执行,您需要创建另一个线程。您使用的是哪个平台/编译器和boost版本?