Introduction to the semaphore concept and how it can be used as an alternative to locks and condition variables
A pencil-and-paper assignment in which you have to reason about a thread-safe stack implemented with semaphores
Outcome(s) assessed: Thread Synchronization