haskell
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.
basvandijk/concurrent-extra