A mutable location, that is either empty or contains
a value of type A
.
A mutable location, that is either empty or contains
a value of type A
.
It has the following fundamental atomic operations:
- put which fills the var if empty, or blocks (asynchronously) until the var is empty again
- tryPut which fills the var if empty. returns true if successful
- take which empties the var if full, returning the contained value, or blocks (asynchronously) otherwise until there is a value to pull
- tryTake empties if full, returns None if empty.
- read which reads the current value without touching it,
assuming there is one, or otherwise it waits until a value
is made available via
put
- tryRead returns
Some(a)
if full, without modifying the var, or else returnsNone
- isEmpty returns true if currently empty
The MVar
is appropriate for building synchronization
primitives and performing simple inter-thread communications.
If it helps, it's similar with a BlockingQueue(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.
- Companion
- object
Value members
Concrete methods
Returns true
if the var is empty, false
if full.
Returns true
if the var is empty, false
if full.
- Definition Classes
- MVar
Modifies the contents of the MVar
using the effectful function f
, but also allows for returning a value derived
from the original contents of the MVar
. Like use, in case of failure, it sets the contents of the MVar
to
the original value.
Modifies the contents of the MVar
using the effectful function f
, but also allows for returning a value derived
from the original contents of the MVar
. Like use, in case of failure, it sets the contents of the MVar
to
the original value.
- Value Params
- f
effectful function that operates on the contents of this
MVar
- Returns
the second value produced by applying
f
to the contents of thisMVar
- Note
This operation is only safe from deadlocks if there are no other producers for this
MVar
.- Definition Classes
- MVar2
Modifies the contents of the MVar
using the effectful function f
. Like use, in case of failure, it sets the
contents of the MVar
to the original value.
Modifies the contents of the MVar
using the effectful function f
. Like use, in case of failure, it sets the
contents of the MVar
to the original value.
- Value Params
- f
effectful function that operates on the contents of this
MVar
- Returns
no useful value. Executed only for the effects.
- Note
This operation is only safe from deadlocks if there are no other producers for this
MVar
.- Definition Classes
- MVar2
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.
- Returns
a task that on evaluation will complete when the
put
operation succeeds in filling theMVar
, with the given value being next in line to be consumed- Definition Classes
- MVar
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.
- Returns
a task that on evaluation will be completed after a value has been read
- Definition Classes
- MVar
Replaces a value in MVar and returns the old value.
Replaces a value in MVar and returns the old value.
- Value Params
- newValue
is a new value
- Returns
the value taken
- Note
This operation is only safe from deadlocks if there are no other producers for this
MVar
.- Definition Classes
- MVar2
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.
- Returns
a task that on evaluation will be completed after a value was retrieved
- Definition Classes
- MVar
Fill the MVar
if we can do it without blocking,
Fill the MVar
if we can do it without blocking,
- Returns
whether or not the put succeeded
- Definition Classes
- MVar
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.
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.
- Definition Classes
- MVar2
Empty the MVar
if full
Empty the MVar
if full
- Returns
an Option holding the current value, None means it was empty
- Definition Classes
- MVar
Applies the effectful function f
on the contents of this MVar
. In case of failure, it sets the contents of the
MVar
to the original value.
Applies the effectful function f
on the contents of this MVar
. In case of failure, it sets the contents of the
MVar
to the original value.
- Value Params
- f
effectful function that operates on the contents of this
MVar
- Returns
the value produced by applying
f
to the contents of thisMVar
- Note
This operation is only safe from deadlocks if there are no other producers for this
MVar
.- Definition Classes
- MVar2