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