Understanding and Implementing Multithreading in C++