19.2.4 Semaphore Implementation