3.46 Exercise 3.46
The situation in which a non-atomic test-and-set! procedure fails is straightforward:
One procedure attempts to open an available mutex
After it determines that the mutex is available, but before it sets it, another procedure checks the value of the mutex and also determines that it is available
Both procedures set the cell and return false, and both can execute at the same time