是std :: thread的共享指针是一种不好的做法?

时间:2018-05-15 14:34:07

标签: c++ multithreading c++11

使用std :: shared_ptr<是否有意义?的std ::螺纹> ? 逻辑很简单:如果不需要线程,删除它,如果需要new,则重新定位它。 有什么办法可以将这个概念与汇总的线程进行比较吗?

我确实知道我系统中线程的确切数量(我开发了图像处理算法,我想给“算法”类的每个子节点一个单独的线程(也许是为了私有,然后不需要shared_ptr),此算法将在何处运行,如果未提供映像,则将此私有线程空闲。 这是一个糟糕的概念吗?

2 个答案:

答案 0 :(得分:12)

你可能会错过事实std::thread析构函数不终止线程。正如评论中已经提到的,if detach or join was not called before, std::thread destructor calls std::terminate。换句话说,std::shared_ptr<std::thread>非常没用。

std::thread是一个相当低级别的对象。您可以查看:

答案 1 :(得分:2)

这个问题的答案是:

  

给每个孩子&#34;算法&#34;将一个单独的线程(可能是   将其设为私有,则不需要shared_ptr)

仅使用真正共享所有权的std::shared_ptr<>

在闲置的线程中通常没有什么害处,但在许多系统上,即使很多线程实例没有运行,也会在线程实例上产生上限。

如果存在线程扩散或创建和破坏线程和交换过多的风险,请引入线程池并仍然不要使用shared_ptr&lt;&gt;因为池中有自己的线程。