# 6.20 `mutex` -- Mutual exclusion support

The `mutex` defines a class that allows mutual-exclusion via aquiring and releasing locks. It does not require (or imply) threading or multi-tasking, though it could be useful for those purposes.

The `mutex` module defines the following class:

`mutex` ()
  Create a new (unlocked) mutex.

  A mutex has two pieces of state -- a ``locked'' bit and a queue. When the mutex is not locked, the queue is empty. Otherwise, the queue contains 0 or more `(function, argument)` pairs representing functions (or methods) waiting to acquire the lock. When the mutex is unlocked while the queue is not empty, the first queue entry is removed and its `function(argument)` pair called, implying it now has the lock.

  Of course, no multi-threading is implied - hence the funny interface for lock, where a function is called once the lock is aquired.

- 6.20.1 Mutex Objects