Semaphores, mutexes and condition variables semaphores • Two types – Binary – 0 or 1 – Counting 0 to n • Wait – decrements • > 0 forces a wait • Post or signal – increments • Lock/unlock – no restrictions mutexes • Owned by a thread – Must be unlocked by the locker – May be locked/unlocked in separate functions • Attempts to get a locked mutex force caller to sleep Condition variables • Creates a safe environment for testing • Forces sleep when false • Operation – Lock a mutex – Test condition (values in condition must be protected by the mutex) • If true, proceed with execution • If false, the mutex is released for you and you are put to sleep on the condition variable • Any thread changing the conditions, signals the condition variable, wakes up ONE sleeper • You must reevaluate the condition or your program may fail (could have changed before your tslice)