If test-and-set! is implemented as an ordinary procedure, two process can acquire the mutex at the same time in the following way: - Process P1 starts executing acquire and reaches the point where test-and-set! sees the cell is false and is interrupted by P2 before it can evaluate the else expression and set the cell to true. - Process P2 interrupts P1 and acquires the mutex because P1 has not cell the cell to true yet. - Process P1 resumes execution and sets the cell to true event though it already is true. - Now both processes think they own the mutex.