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 signalling 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.