• If the lock can be granted now, then grant it.

  • Otherwise, add the request to the queue and wait.

  • wait(): Blocks. Stops blocking when signalled from another process releasing the lock.