Concludes coverage of threads. Motivates and explains the use of Condition Variables which allow threads to be notified when a shared resource has changed to a state of interest to the thread, allows for reduction of lock contention and more efficient execution by avoiding repeated lock/unlock loops. Discusses differences between Reentrant/Signal Safe functions and Thread Safe functions, touches on a couple specific examples. Closes with discussion of when to use Processes vs Threads to solve a problem.