Concurrency and Parallelism
- Concurrency vs parallelism: interleaving vs simultaneous execution
- Synchronisation primitives: mutexes, semaphores, condition variables, monitors
- Classic problems: producer-consumer, readers-writers, dining philosophers
- Deadlock: conditions (mutual exclusion, hold-and-wait, no preemption, circular wait), detection, prevention, avoidance (banker's algorithm)
- Lock-free and wait-free data structures: CAS operations, atomic variables
- Parallel programming models: shared memory (OpenMP), message passing (MPI)
- Async and event-driven: event loops, coroutines, async/await
- Amdahl's law, Gustafson's law, scalability limits