gpt4 book ai didi

c++ - Shared_ptr 在创建 boost 线程时从未被释放

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:19 25 4
gpt4 key购买 nike

所以我这里有一个奇怪的情况。我有以下代码:

int main()
{
std::shared_ptr<MyClassA> classA = std::shared_ptr<MyClassA>(new MyClassA);
std::shared_ptr<MyClassB> classB = std::shared_ptr<MyClassB>(new MyClassB(classA));

boost::thread_group threadGroup;

// This thread is essentially an infinite loop waiting for data on a socket
threadGroup.create_thread( boost::bind(&MyClassB::method1, classB) );

...do stuff

return 0;
}

MyClassB 打开几个资源,程序退出时不会释放这些资源。但是,如果我删除对 create_thread 的调用,资源将被释放。我在 MyClassB 的析构函数中放置了一个打印输出,并验证如果创建该线程,它不会被调用。

有人知道这里发生了什么吗?

最佳答案

根据文档 boost::thread_group 析构函数会销毁所有 onwed 线程。 boost::thread 按顺序析构:

  • if defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE: If *this has an associated thread of execution, calls detach(), DEPRECATED
  • BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE: If the thread is joinable calls to std::terminate. Destroys *this.

所以你需要明确地加入线程。您可以通过在程序结束时调用 boost::thread_group::join_all() 来做到这一点。

关于c++ - Shared_ptr 在创建 boost 线程时从未被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32912491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com