##
5.9.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.