使用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())本身。
如何避免此问题?
由于