MVar

zio.concurrent.MVar
See theMVar companion object
final class MVar[A]

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 and put as receive and send, and
  • As a binary semaphore MVar[Unit], with take and put as wait and signal.

They were introduced in the paper "Concurrent Haskell" by Simon Peyton Jones, Andrew Gordon and Sigbjorn Finne.

Attributes

Companion
object
Graph
Supertypes
class Object
trait Matchable
class Any

Members list

Value members

Concrete methods

def isEmpty: UIO[Boolean]

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

def modify[B](f: A => (B, A)): UIO[B]

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

def put(x: A): UIO[Unit]

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

def read: UIO[A]

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

def swap(x: A): UIO[A]

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

def take: UIO[A]

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

def tryPut(x: A): UIO[Boolean]

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

def tryRead: UIO[Option[A]]

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

def tryTake: UIO[Option[A]]

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.

Attributes

def update(f: A => A): UIO[Unit]

Replaces the contents of an MVar with the result of f(a).

Replaces the contents of an MVar with the result of f(a).

Attributes