MVar

final class MVar[F[_], A] extends MVar2[F, A]

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 returns None
  • 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
class MVar2[F, A]
class MVar[F, A]
trait MVarDocumentation
class Object
trait Matchable
class Any

Value members

Concrete methods

override def isEmpty: F[Boolean]

Returns true if the var is empty, false if full.

Returns true if the var is empty, false if full.

Definition Classes
MVar
override def modify[B](f: A => F[(A, B)]): F[B]

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 this MVar

Note

This operation is only safe from deadlocks if there are no other producers for this MVar.

Definition Classes
MVar2
override def modify_(f: A => F[A]): F[Unit]

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
override def put(a: A): F[Unit]

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 the MVar, with the given value being next in line to be consumed

Definition Classes
MVar
override def read: F[A]

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
override def swap(newValue: A): F[A]

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
override def take: F[A]

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
override def tryPut(a: A): F[Boolean]

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
override def tryRead: F[Option[A]]

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
override def tryTake: F[Option[A]]

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
override def use[B](f: A => F[B]): F[B]

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 this MVar

Note

This operation is only safe from deadlocks if there are no other producers for this MVar.

Definition Classes
MVar2

Inherited methods

def imapK[G[_]](f: FunctionK[F, G], g: FunctionK[G, F]): MVar2[G, A]

Modify the context F using natural isomorphism f with g.

Modify the context F using natural isomorphism f with g.

Value Params
f

functor transformation from F to G

g

functor transformation from G to F

Returns

MVar2 with a modified context G derived using a natural isomorphism from F

Inherited from
MVar2

Deprecated and Inherited methods

@deprecated("`mapK` is deprecated in favor of `imapK` which supports the new invariant `MVar2` interface", "2.2.0")
def mapK[G[_]](f: FunctionK[F, G]): MVar[G, A]

Modify the context F using transformation f.

Modify the context F using transformation f.

Deprecated
Inherited from
MVar