加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在共享库中创建线程是不好的做法吗?

发布时间:2020-12-16 09:55:24 所属栏目:百科 来源:网络整理
导读:我正在创建一个共享库,其中一个类在其构造函数中创建一个线程,该类运行它直到调用析构函数.此类的所有方法都是线程安全的.像这样的东西: class NetworkRPCConnection { std::thread t;public: NetworkRPCConnection() : t([](){maintain_connection();}) {}
我正在创建一个共享库,其中一个类在其构造函数中创建一个线程,该类运行它直到调用析构函数.此类的所有方法都是线程安全的.像这样的东西:

class NetworkRPCConnection {
  std::thread t;
public:
  NetworkRPCConnection() : t([](){maintain_connection();}) {}
  ~NetworkRPCConnection(){close_connection(); t.join();}
}

这工作正常,但在共享库中创建线程是不好的做法吗?是否值得在API文档中提及,或者隐藏此实现细节是否更好?

解决方法

一般来说,最好避免在共享库中创建线程,但在某些情况下可以正常 – 但在这些情况下,您确实需要在API中记录它.

您需要记录它的原因是线程可以很难交互以预测某些操作的方式 – 特别是fork()和信号;这使得无法将线程完全“隐藏”为实现细节,因为库用户需要了解它.

至于为什么最好不要创建线程:通常,库的用户可以更好地了解他们的线程模型 – 例如,他们可能已经拥有了可以完成工作的线程,因此创建另一个线程只会产生额外的开销(并限制其实施).但是如果你非常了解库用户的需求,并且知道需要一个专用线程,并且可以处理线程生命周期的所有方面 – 那么自己创建和管理线程可能没问题 – 但是,如上所述,你肯定需要记录它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读