C++ Concurrency in Action Anthony Williams
Chapter 4. Synchronizing concurrent operations
4.2 Waiting for one-off events with futures
4.2.1 Returning values from background tasks
4.2.2 Associating a task with a future
4.2.3 Making (std::) promises
4.2.4 Saving an exception for the future
4.2.5 Waiting from multiple threads
4.3 Waiting with a time limit
4.3.1 Clocks
4.3.2 Durations
4.3.3 Time points
4.3.4 Functions that accept timeouts
4.4 Using synchronization of operations to simplify code
4.4.1 Functional programming with futures
4.4.2 Synchronizing operations with message passing
Chapter 5. The C++ memory model and operations on atomic types
5.1 Memory model basics
5.1.1 Objects and memory locations
5.1.2 Objects, memory locations, and concurrency
5.1.3 Modification orders
5.2 Atomic operations and types in C++
5.2.1 The standard atomic types