Linux Systems Programming: Multithreading#
Parallel programming is hard - this is no different on Linux. This course gives a solid overview of multithreading on Linux (POSIX threads, basically), and its mechanisms for synchronization and communication. Ah, yes, realtime.

Course Outline#
Thread lifecycle. Once started, threads need to be managed, and sometimes they also need to be terminated.
Thread creation
Joinable vs. detached
Thread termination
Thread attributes: realtime properties
Raceconditions, and avoidance. In the face of multithreading, all code you write can only be wrong. Why is that?
Load-Modify-Store: the mother of all raceconditions
Mutexes: types (e.g. normal vs. recursive), usage
Atomic operations on builtin types
Communication mechanisms. Understanding condition variables
Principles: the lost wakeup bug
Exercise: a handwritten message queue
Exercise: mimicking WIN32 auto reset events
Miscellaneous.
One-time initialization
Thread Specific Data (Thread Local Storage)
Realtime. Yes, Linux is a realtime OS.
Scheduling policies: FIFO, round robin, batch, deadline …
Scheduling priorities
Bugs, bugs: priority inversion, and avoidance
Prerequisites#
A solid understanding of the C programming language is helpful. Fun with low-level hacking is required.