使用std :: shared_ptr<是否有意义?的std ::螺纹> ? 逻辑很简单:如果不需要线程,删除它,如果需要new,则重新定位它。 有什么办法可以将这个概念与汇总的线程进行比较吗?
我确实知道我系统中线程的确切数量(我开发了图像处理算法,我想给“算法”类的每个子节点一个单独的线程(也许是为了私有,然后不需要shared_ptr),此算法将在何处运行,如果未提供映像,则将此私有线程空闲。 这是一个糟糕的概念吗?
答案 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;因为池中有自己的线程。