最佳实践:我应该使用 std::thread、Boost 还是本机调用?
Best practice: should I use std::thread, Boost, or native calls?
使用什么最佳实践:std::thread、本机调用或某些库? std::thread 是一种“不实际使用”的便利,还是应该在需要线程时使用它?在 c++11 出现之前,看起来某些线程库最适合可移植性,但现在 std::thread 是一回事...
现在在重大项目中应该使用什么 - 就行业标准而言?
经验法则:
- 如果某个东西已经在标准库中超过 X 年,请使用它,除非您知道它不适合您的需要。
- 如果某些东西在标准库中存在 <= X 年,而您正在编写 non-critical 代码:与以前相同 - 使用它。
否则:
- 寻找它是如何进入标准库的(通常是:Boost);
- 四处寻找提及他们两人的讨论、作者的帖子等;
- 地图特征集/设计决策差异;
- 如果您仍然没有足够的信息来做出决定,请在这里提问。
对于您的情况,请参阅:
C++ 11 Thread vs Boost Thread is there any difference?
您会注意到 Boost 线程有一些标准中没有的功能。如果您需要这些,请使用 Boost 线程,否则使用 std::thread
.
没有一个答案可以一统天下。
TL;DR 这取决于
如果您想要最佳性能(可能是您使用 c++ 的原因之一)使用本地调用。您拥有完全的控制权,并且没有包装器 类 和检查的开销。
如果您需要可移植性并且支持c++11,std中的实现是一个很好的选择选择。大多数情况下,此选项最容易入手,并且可用资源最多。
目前 boost 复制了标准的功能。但如果 编译器不支持 c++11,它仍然是可行的选择。在最近的几次修订中,相同的增强功能直接复制到标准中。(例如智能指针)
使用什么最佳实践:std::thread、本机调用或某些库? std::thread 是一种“不实际使用”的便利,还是应该在需要线程时使用它?在 c++11 出现之前,看起来某些线程库最适合可移植性,但现在 std::thread 是一回事...
现在在重大项目中应该使用什么 - 就行业标准而言?
经验法则:
- 如果某个东西已经在标准库中超过 X 年,请使用它,除非您知道它不适合您的需要。
- 如果某些东西在标准库中存在 <= X 年,而您正在编写 non-critical 代码:与以前相同 - 使用它。
否则:
- 寻找它是如何进入标准库的(通常是:Boost);
- 四处寻找提及他们两人的讨论、作者的帖子等;
- 地图特征集/设计决策差异;
- 如果您仍然没有足够的信息来做出决定,请在这里提问。
对于您的情况,请参阅:
C++ 11 Thread vs Boost Thread is there any difference?
您会注意到 Boost 线程有一些标准中没有的功能。如果您需要这些,请使用 Boost 线程,否则使用 std::thread
.
没有一个答案可以一统天下。
TL;DR 这取决于
如果您想要最佳性能(可能是您使用 c++ 的原因之一)使用本地调用。您拥有完全的控制权,并且没有包装器 类 和检查的开销。
如果您需要可移植性并且支持c++11,std中的实现是一个很好的选择选择。大多数情况下,此选项最容易入手,并且可用资源最多。
目前 boost 复制了标准的功能。但如果 编译器不支持 c++11,它仍然是可行的选择。在最近的几次修订中,相同的增强功能直接复制到标准中。(例如智能指针)