Difficulties with Semaphores
wait(s) and signal(s) are scattered among several processes. Therefore, it is difficult to understand their effects.
Usage must be correct in all the processes.
One bad process (or one programming error) can kill the whole system.
Semaphores provide a powerful synchronization tool.