由自身连接和销毁的线程

时间:2017-12-04 16:14:03

标签: c++ multithreading boost shared-ptr

使用shared_ptr和thread时,我在程序中遇到线程删除问题:

main()
{
  auto a = boost::shared_ptr<A>(new A());
  m_list.insert( a );
  a->run();

  // DO SOMETHING

  m_list.clear();

  ...
}


class A : public boost::enable_shared_from_this<A>
{
   A::run()
   {
      m_thread = unique_ptr<boost:thread>(new boost:thread(&A::thread, shared_from_this()))
   }

   A::~A()
   {
      m_thread->join();
      m_thread.reset();
   }

   A::thread()
   {
      // DO SOMETHING
   }

}

根据每个部分中的main()或A :: thread()所占用的时间“// DO SOMETHING”:对象A被主线程或A :: run中创建的线程销毁( )。 如果是第一种情况,一切正常。否则,在第二种情况下,线程尝试连接(join())和destroy(reset())本身。

如何避免此问题?

由于

0 个答案:

没有答案