Edgar Dijkstra.
Semaphore s = INIT(1) P1: loop P2: loop P(s) P(s) C1 C2 V(s) V(s)
Typically implemented by locks!