Forward Progress in C++
summary
Defines three concrete progress guarantees: concurrent forward progress for full threads (jthread, join/terminate rules), parallel forward progress for thread-pool and std::execution::par work (requires at least one task per submitted set to start, enables work stealing and amortization), and weakly parallel for GPUs/vector lanes (std::execution::par_unseq). Uses litmus tests, barriers, std::barrier, a system thread pool and work stealing, and shows deadlock vs livelock and why lockfree atomics are actually obstruction free. Describes blocking with forward progress delegation as the practical fix.
AI-written summary · about
chapters (15)
- 0:00Introduction
- 1:46What are progress guarantees
- 10:11Single-threaded code limits
- 11:14Concurrent forward progress
- 20:47Deadlock vs progress
- 21:09Parallel forward progress
- 32:26Thread pool efficiency
- 41:46Starvation and lifelocks
- 47:03Weakly parallel progress
- 53:26Pure parallelism use cases
- 1:00:01Undefined behavior quirks
- 1:03:57Memory model impacts
- 1:10:18Lock freedom explained
- 1:13:29Future of parallelism
- 1:16:23Summary and Q&A
related talks
50mC++ Parallel Programming Models
59mAn Introduction to Multithreading in C++20
01h 08mBetter Code: Concurrency
01h 04mAtomics, Locks, and Tasks (part 2 of 2)
01h 24mConcurrency in C++20 and Beyond
01h 00mC++ Standard Parallelism
53mAtomics, Locks, and Tasks (part 1 of 2)
01h 00mConcurrency in C++20: A Deep Dive
