C++ Concurrency in Action: Practical Multithreading