对于基于Linux的高CPU吞吐量(读作:大量浮点运算(应用程序,使用boost::thread
、std::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::reduce
、std::packaged_task
、std::async
、算法的并行执行策略等。
唯一支持的标准是std::thread
,如果您的构建工具允许C++11或更高版本,则应该使用它。它是boost::thread
的派生但标准化的版本。
Pthreads是一种特定于平台的线程实现,std::thread
由C++11标准保证。通常在类似POSIX的系统上,std::thread
在内部使用pthreads。