An MVar[A]
is a mutable location that is either empty or contains a value of type A
. It has two fundamental operations: put
which fills an MVar
if it is empty and blocks otherwise, and take
which empties an MVar
if it is full and blocks otherwise. They can be used in multiple different ways:
- As synchronized mutable variables,
- As channels, with
take
andput
asreceive
andsend
, and - As a binary semaphore
MVar[Unit]
, withtake
andput
aswait
andsignal
.
They were introduced in the paper "Concurrent Haskell" by Simon Peyton Jones, Andrew Gordon and Sigbjorn Finne.
Attributes
- Companion
- object
- Graph
-
- Supertypes
Members list
Value members
Concrete methods
Check whether the MVar
is empty.
Check whether the MVar
is empty.
Notice that the boolean value returned is just a snapshot of the state of the MVar
. By the time you get to react on its result, the MVar
may have been filled (or emptied) - so be extremely careful when using this operation. Use tryTake
instead if possible.
Attributes
A slight variation on update
that allows a value to be returned (b
) in addition to the modified value of the MVar
.
A slight variation on update
that allows a value to be returned (b
) in addition to the modified value of the MVar
.
Attributes
Put a value into an MVar
. If the MVar
is currently full, put
will wait until it becomes empty.
Put a value into an MVar
. If the MVar
is currently full, put
will wait until it becomes empty.
Attributes
Atomically read the contents of an MVar
. If the MVar
is currently empty, read
will wait until it is full. read
is guaranteed to receive the next put
.
Atomically read the contents of an MVar
. If the MVar
is currently empty, read
will wait until it is full. read
is guaranteed to receive the next put
.
Attributes
Take a value from an MVar
, put a new value into the MVar
and return the value taken.
Take a value from an MVar
, put a new value into the MVar
and return the value taken.
Attributes
Return the contents of the MVar
. If the MVar
is currently empty, take
will wait until it is full. After a take
, the MVar
is left empty.
Return the contents of the MVar
. If the MVar
is currently empty, take
will wait until it is full. After a take
, the MVar
is left empty.
Attributes
A non-blocking version of put
. The tryPut
function attempts to put the value x
into the MVar
, returning true
if it was successful, or false
otherwise.
A non-blocking version of put
. The tryPut
function attempts to put the value x
into the MVar
, returning true
if it was successful, or false
otherwise.
Attributes
A non-blocking version of read
. The tryRead
function returns immediately, with None
if the MVar
was empty, or Some(x)
if the MVar
was full with contents x
.
A non-blocking version of read
. The tryRead
function returns immediately, with None
if the MVar
was empty, or Some(x)
if the MVar
was full with contents x
.
Attributes
A non-blocking version of take
. The tryTake
action returns immediately, with None
if the MVar
was empty, or Some(x)
if the MVar
was full with contents x
. After tryTake
, the MVar
is left empty.
A non-blocking version of take
. The tryTake
action returns immediately, with None
if the MVar
was empty, or Some(x)
if the MVar
was full with contents x
. After tryTake
, the MVar
is left empty.