boost::thread 对比 std::thread 对比 pthread

boost::thread vs std::thread vs pthread

b/w boost::threadstd::thread (C++11) 和 pthread 对高 CPU 吞吐量的权衡是什么(阅读:很多浮点运算)Linux 的应用程序?什么时候应该使用一种实现而不是其他实现?

这里的用例是在连续内存的缓冲区(或指向缓冲区的指针)上调用例程,做一些工作,然后 return -- 在多线程实现中。

唯一的 standard-supported 是 std::thread,如果您的构建工具允许 C++11 或更高版本,您应该使用它。它是 boost::thread.

的派生但标准化版本

Pthreads 是线程的 platform-specific 实现,std::thread 由 C++11 标准保证。通常在 POSIX 类似的系统上 std::thread 在内部使用 pthreads。

  • std::thread
    • Pro:是标准的;保证在所有符合标准的平台上。
    • 缺点:需要 C++11,因此不能与 Ancient 一起使用。编译器。只有基本的、最低的公分母特征。但是,仍然可以通过 std::thread::native_handle.
    • 使用平台特定的功能
  • boost::thread
    • Pro:是跨平台的,受古代编译器支持。
    • 缺点:不标准;需要外部依赖。与标准线程相似的功能集。
  • pthread:
    • 专业版:具有更多功能,例如调度策略。
    • 缺点:仅在 POSIX 系统上存在,不包括 Windows。 Non-RAII界面。

When should one implementation be used over the others?

std::thread 通常是一个很好的默认值。如果您需要标准中没有的 pthread 功能,您可以在 std::thread::native_handle 的帮助下使用它们(对随之而来的可移植性有影响)。没有理由在 C++ 中直接使用 pthread 否则(据我所知)。

如果您需要古老的 pre-C++11 支持,可以使用

boost::thread,以保持对其他系统的可移植性。


注意std::thread本身不需要直接使用。该标准具有有用的抽象,例如 std::reducestd::packaged_taskstd::async、算法的并行执行策略等