This document discusses synchronization tools used to solve the critical section problem in operating systems. It begins with an overview and objectives, then describes the critical section problem and race conditions that can occur. It presents Peterson's solution and discusses how hardware support like mutex locks, semaphores, and monitors can provide synchronization. Memory barriers are introduced to address instruction reordering issues on modern architectures. The document evaluates different synchronization tools for low, moderate, and high contention scenarios.