Concepts Race Condition vs. Data Race Dead Lock Data Parallelism and Task Parallelism Constructs Primitives Atomics Mutex Reader-Writer Lock thread-parking Condition Variables High Level coroutines: either fiber or stackless coroutines await syntax Patterns concurrency patterns structured concurrency Best Practices avoid blocking shared mutable data needs synchronization law of exclusivity Lock-Free Programming see: lock-free programming compare and swap ABA problem hazard pointer Related GPU Programming