Mastering C++ multithreading