【问题标题】:Best practice: should I use std::thread, Boost, or native calls? [closed]最佳实践:我应该使用 std::thread、Boost 还是本机调用? [关闭]
【发布时间】:2018-04-08 21:02:23
【问题描述】:

使用什么最佳实践:std::thread、本机调用或某些库? std::thread 是“实际上不使用这个”的便利,还是应该在需要线程时使用?在 c++11 出现之前,看起来一些线程库最适合可移植性,但现在 std::thread 是一件事......

现在在主要项目中应该使用什么(就行业标准而言)?

【问题讨论】:

  • 使用最适合您的用例/公司实践的一种。惯用的方式应该是std::thread
  • 我发现 ISO C++ 委员会的想法是故意添加一个你最好不要使用的支持类型......奇怪。

标签: c++ multithreading c++11 std stdthread


【解决方案1】:

经验法则:

  • 如果某些东西在标准库中已经存在 > X 年,请使用它,除非您知道它不适合您的需求。
  • 如果某些东西在标准库中已经存在
  • 否则:

    • 寻找它是如何进入标准库的(通常是:Boost);
    • 四处寻找提及他们两人的讨论、作者的帖子等;
    • 地图功能集/设计决策差异;
    • 如果您仍然没有足够的信息来做出决定,请在此处提问。

在你的情况下,请参阅:

C++ 11 Thread vs Boost Thread is there any difference?

您会注意到 Boost 线程有一些标准中没有的功能。如果需要,请使用 Boost 线程,否则请使用 std::thread

【讨论】:

  • 如何选择X?
  • @ChrisHunt:我向 Bjarne Stroustrup 的小雕像祈祷?说真的,我不知道。肯定是 X > 3,所以它需要在那里超过一个标准周期。
  • 是的,“下一个标准”是一个很好的标准。如果下一个标准对该功能进行了大量修改,最好避免使用它,例如 not-so-smart_ptr。
【解决方案2】:

没有一个答案可以统治所有这些。

TL;DR 这取决于

如果您想要最佳性能(可能是您使用 c++ 的原因之一),请使用 本机调用。您拥有完全的控制权,并且没有包装类和检查的开销。

如果您需要可移植性并且支持c++11,那么std 中的实现是一个不错的选择。大多数情况下,此选项最容易上手,并且可用资源最多。

目前 boost 复制了标准的功能。但如果 编译器不支持 c++11,它仍然是可行的选择。在最新的几个版本中,相同的增强特性被直接复制到标准中。(例如智能指针)

【讨论】:

  • std::thread 特别是在 Linux pthread_create 或 Windows _beginthreadex 上的非常 瘦包装器(阅读:单线)。我真诚地怀疑 Kurtoid 能否做得更好。
猜你喜欢
  • 2012-09-04
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2014-03-24
相关资源
最近更新 更多