C++ concurrency in action. Practical Multithreading