boost::thread vs std::thread vs pthread



对于基于Linux的高CPU吞吐量(读作:大量浮点运算(应用程序,使用boost::threadstd::thread(C++11(和pthread有哪些权衡?什么时候应该使用一个实现而不是其他实现?

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

  • std::thread
    • Pro:是标准配置;保证在所有符合要求的平台上
    • 缺点:需要C++11,所以它不能与古代编译器一起使用。只有基本的、最低公分母的特性。但是,特定于平台的功能仍然可以通过std::thread::native_handle使用
  • boost::thread
    • Pro:是跨平台的,在古代编译器上受支持
    • 缺点:不标准;需要外部依赖关系。与标准螺纹类似的功能集
  • pthread
    • Pro:具有更多功能,如schduling策略
    • 缺点:仅在POSIX系统上,不包括Windows。非RAII接口

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

std::thread通常是一个不错的默认值。如果您需要标准中没有的pthread功能,您可以在std::thread::native_handle的帮助下使用它们(这会影响它的可移植性(。没有理由在C++中直接使用pthread(据我所知(。

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


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

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

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

最新更新