问题描述
对于高cpu吞吐量(请参阅:大量浮点操作),基于Linux的应用程序,黑白平衡boost::thread
,std::thread
(C ++ 11)和pthread
的平衡?什么时候应该使用一种实现而不是其他实现?
这里的用例是在多线程实现中调用连续内存的缓冲区(或指向缓冲区的指针)上的例程,进行一些工作,然后返回-
解决方法
-
std::thread
- Pro:是标准配置;保证可以在所有兼容平台上使用。
- Con:需要C ++ 11,因此不能与Ancient一起使用。编译器。只有基本的,最低的公分母功能。但是,仍可以通过
std::thread::native_handle
使用平台特定的功能。
-
boost::thread
- Pro:是跨平台的,在古代编译器中受支持。 缺点:不是标准的;需要外部依赖。与标准线程类似的功能集。
pthread
:
- 专业版:具有更多功能,例如计划策略。
- Con:仅在POSIX系统上,不包括Windows。非RAII界面。
什么时候应该使用一种实现?
std::thread
通常是一个很好的默认设置。如果您需要标准中未包含的pthread
功能,则可以在std::thread::native_handle
的帮助下使用它们(以及随之而来的可移植性)。没有理由在C ++中直接使用pthread
。
boost::thread
可用于需要较早的C ++ 11以前的支持以保持可移植到其他系统的情况。
请注意,std::thread
本身不需要直接使用。该标准具有有用的抽象,例如std::reduce
,std::packaged_task
,std::async
,算法的并行执行策略等。
唯一受标准支持的是std::thread
,如果构建工具允许使用C ++ 11或更高版本,则应使用该标准。它是boost::thread
的派生但标准化版本。
Pthreads是特定于平台的线程实现,std::thread
由C ++ 11的标准保证。通常在类似POSIX的系统上,std::thread
在内部使用pthreads。