Linux is a new platform to me. I\'ve coded on Windows in c++ for a number of years and have become comfortable with multithreading on that platform.
Along comes C++
std::thread
is boost::thread accepted into C++11 with some extras. My understanding is that if boost::thread
gets replaced in code with std::thread
it should still compile and work.
boost::thread
is based on pthreads
design, providing thin C++ wrappers over thread, mutex and condition variables. Thread cancellation though was left outside the scope of C++11, since there was no agreement how it should work in C++.
So, by learning pthreads
you also learn std::thread
concepts. std::thread
adds mostly syntax sugar and convenience functions on top of pthreads
C API.
With regards to WaitForMultipleObjects()
, neither pthreads
nor std::thread
provide anything similar to its bWaitAll=FALSE
mode, however, it's routinely simulated using pipes and select()
on UNIX, or more modern eventfd()
and epoll()
on Linux. bWaitAll=TRUE
mode can be simulated by waiting on all tasks in turn, since it doesn't proceed until all objects are ready anyway.