Introduction to Condition Variables
Introduction to Semaphores
Overview of classic concurrency problems