The 'concurrent-extra' package offers among other things the following
selection of synchronisation primitives:
* 'Broadcast': Wake multiple threads by broadcasting a value.
* 'Event': Wake multiple threads by signaling an event.
* 'Lock': Enforce exclusive access to a resource. Also known as a binary
semaphore or mutex. The package additionally provides an alternative that works
in the 'STM' monad.
* 'RLock': A lock which can be acquired multiple times by the same thread.
Also known as a reentrant mutex.
* 'ReadWriteLock': Multiple-reader, single-writer locks. Used to protect shared
resources which may be concurrently read, but only sequentially written.
* 'ReadWriteVar': Concurrent read, sequential write variables.
Please consult the API documentation of the individual modules for more
detailed information.
This package was inspired by the concurrency libraries of Java and Python.