##
6.11.1 Mutex Objects

`mutex` objects have following methods:

`test`()
  Check whether the mutex is locked.

`testandset`()
  ``Atomic'' test-and-set, grab the lock if it is not set, and return true, otherwise, return false.

`lock`(function, argument)
  Execute `function(argument)`, unless the mutex is locked. In the case it is locked, place the function and argument on the queue. See `unlock` for explanation of when `function(argument)` is executed in that case.

`unlock`()
  Unlock the mutex if queue is empty, otherwise execute the first element in the queue.