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

hag*_*gor 5 c++ multithreading c++11

使用std :: shared_ptr <std :: thread>是否有意义?逻辑很简单:如果不需要线程,删除它,如果需要new,则重新定位它.有没有办法将这个概念与汇集线程进行比较?

我确实知道我系统中线程的确切数量(我开发了图像处理算法,我想给每个"算法"类的子项一个单独的线程(也许是为了私有,然后不需要shared_ptr),这个算法将运行,如果没有提供图像,则将此私有线程空闲.这是一个坏概念吗?

Max*_*kin 12

您可能会错过std::thread析构函数不终止线程的事实.正如评论中已经提到的,如果之前detachjoin之前没有调用过,std::thread析构函数调用std::terminate.换句话说,std::shared_ptr<std::thread>是没用的.

A std::thread是一个相当低级的对象.你可能想看看:

  • 您可以在关闭之前为线程提供自定义删除器以"join".虽然我认为这不是一个好的设计,但是`std :: shared_ptr <std :: thread>`的少数情况也许有用,看起来像这样的删除器可以工作的情况. (4认同)