Returns true
if the var is empty, false
if full.
Returns true
if the var is empty, false
if full.
Fills the MVar
if it is empty, or blocks (asynchronously)
if the MVar
is full, until the given value is next in
line to be consumed on take.
Fills the MVar
if it is empty, or blocks (asynchronously)
if the MVar
is full, until the given value is next in
line to be consumed on take.
This operation is atomic.
a task that on evaluation will complete when the
put
operation succeeds in filling the MVar
,
with the given value being next in line to
be consumed
Tries reading the current value, or blocks (asynchronously) until there is a value available.
Tries reading the current value, or blocks (asynchronously) until there is a value available.
This operation is atomic.
a task that on evaluation will be completed after a value has been read
Empties the MVar
if full, returning the contained value,
or blocks (asynchronously) until a value is available.
Empties the MVar
if full, returning the contained value,
or blocks (asynchronously) until a value is available.
This operation is atomic.
a task that on evaluation will be completed after a value was retrieved
Fill the MVar
if we can do it without blocking,
Fill the MVar
if we can do it without blocking,
whether or not the put succeeded
Tries reading the current value, returning Some(a)
if the var
is full, but without modifying the var in any way.
Tries reading the current value, returning Some(a)
if the var
is full, but without modifying the var in any way. Or None
if the var is empty.
Empty the MVar
if full
Empty the MVar
if full
an Option holding the current value, None means it was empty
A mutable location, that is either empty or contains a value of type
A
.It has the following fundamental atomic operations:
put
Some(a)
if full, without modifying the var, or else returnsNone
The
MVar
is appropriate for building synchronization primitives and performing simple inter-thread communications. If it helps, it's similar with aBlockingQueue(capacity = 1)
, except that it is pure and that doesn't block any threads, all waiting being done asynchronously.Given its asynchronous, non-blocking nature, it can be used on top of Javascript as well.
N.B. this is a reimplementation of the interface exposed in Cats-Effect, see: cats.effect.concurrent.MVar
Inspired by Control.Concurrent.MVar from Haskell.