std::thread
- Pro: Is standard; guaranteed to be on all conforming platforms.
- Con: Requires C++11, so it cannot be used with ancient compilers. Only basic, lowest common denominator features. However, platform specific features can still be used through
std::thread::native_handle
.
boost::thread
- Pro: Is cross platform, is supported on ancient compilers.
- Con: Is not standard; requires an external dependency. Similar feature set as standard threads.
pthread
:
- Pro: Has more features such as schduling policy.
- Con: Is only on POSIX systems, which excludes Windows. Non-RAII interface.
When should one implementation be used over the others?
std::thread
is often a good default. If you need features of pthread
that are not in the standard, you can use them with the help of std::thread::native_handle
(with the implications on the portability that come with it). There's no reason to use pthread
directly otherwise (that I know of) in C++.
boost::thread
can be used if you need ancient pre-C++11 support, to remain portable to other systems.
Note that std::thread
itself doesn't need to be used directly. The standard has useful abstractions such as std::reduce
, std::packaged_task
, std::async
, parallel execution policies for algorithms etc.