Invented by [Edsger Dijkstra] as a low-level locking primitive that could be used to support ''n''-at-a-time access to a shared resource.