List of Figures

 

Chapter 1. Hello, world of concurrency in C++!

Figure 1.1. Two approaches to concurrency: parallel execution on a dual-core machine versus task switching on a single-core machine

Figure 1.2. Task switching of four tasks on two cores

Figure 1.3. Communication between a pair of processes running concurrently

Figure 1.4. Communication between a pair of threads running concurrently in a single process

Chapter 3. Sharing data between threads

Figure 3.1. Deleting a node from a doubly linked list

Chapter 4. Synchronizing concurrent operations

Figure 4.1. Using multiple std::shared_future objects to avoid data races

Figure 4.2. FP-style recursive sorting

Figure 4.3. A simple state machine model for an ATM

Chapter 5. The C++ memory model and operations on atomic types

Figure 5.1. The division of a struct into objects and memory locations

Figure 5.2. Enforcing an ordering between nonatomic operations using atomic operations

Figure 5.3. Sequential consistency and happens-before

Figure 5.4. Relaxed atomics and happens-before

Figure 5.5. The notebook for the man in the cubicle

Figure 5.6. Acquire-release and happens-before

Figure 5.7. The release sequence for the queue operations from listing 5.11

Chapter 6. Designing lock-based concurrent data structures

Figure 6.1. A queue represented using a single-linked list

Chapter 7. Designing lock-free concurrent data structures