boost::thread 与 std::thread 与 pthread

Big*_*r00 1 c++ multithreading pthreads boost-thread c++11

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

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

eer*_*ika 6

  • std::thread
    • 亲:是标准的;保证在所有符合标准的平台上。
    • 缺点:需要 C++11,所以不能和古文一起使用。编译器。只有基本的、最小的公分母特征。但是,平台特定的功能仍然可以通过std::thread::native_handle.
  • boost::thread
    • 优点:是跨平台的,在古老的编译器上受支持。
    • 缺点:不标准;需要外部依赖。与标准线程类似的功能集。
  • pthread
    • 优点:具有更多功能,例如调度策略。
    • 缺点:仅在 POSIX 系统上,不包括 Windows。非 RAII 接口。

什么时候应该使用一种实现而不是其他实现?

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

boost::thread 如果您需要古老的 pre-C++11 支持,可以使用它,以保持对其他系统的可移植性。


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


Som*_*ken 5

唯一支持的标准是std::thread,如果您的构建工具允许 C++11 或更高版本,则应该使用它。它是 的派生但标准化版本boost::thread

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