Synchronized

abstract class Synchronized[A] extends Ref[A]

A Ref.Synchronized is a purely functional description of a mutable reference. The fundamental operations of a Ref.Synchronized are set and get. set sets the reference to a new value. get gets the current value of the reference.

Unlike an ordinary Ref, a Ref.Synchronized allows performing effects within update operations, at some cost to performance. Writes will semantically block other writers, while multiple readers can read simultaneously.

Companion:
object
class Ref[A]
class Object
trait Matchable
class Any

Value members

Abstract methods

def get(implicit trace: Trace): UIO[A]

Reads the value from the Ref.

Reads the value from the Ref.

def modifyZIO[R, E, B](f: A => ZIO[R, E, (B, A)])(implicit trace: Trace): ZIO[R, E, B]

Atomically modifies the Ref.Synchronized with the specified function, which computes a return value for the modification. This is a more powerful version of update.

Atomically modifies the Ref.Synchronized with the specified function, which computes a return value for the modification. This is a more powerful version of update.

def set(a: A)(implicit trace: Trace): UIO[Unit]

Writes a new value to the Ref, with a guarantee of immediate consistency (at some cost to performance).

Writes a new value to the Ref, with a guarantee of immediate consistency (at some cost to performance).

def setAsync(a: A)(implicit trace: Trace): UIO[Unit]

Writes a new value to the Ref without providing a guarantee of immediate consistency.

Writes a new value to the Ref without providing a guarantee of immediate consistency.

Concrete methods

def getAndUpdateSomeZIO[R, E](pf: PartialFunction[A, ZIO[R, E, A]])(implicit trace: Trace): ZIO[R, E, A]

Atomically modifies the Ref.Synchronized with the specified partial function, returning the value immediately before modification. If the function is undefined on the current value it doesn't change it.

Atomically modifies the Ref.Synchronized with the specified partial function, returning the value immediately before modification. If the function is undefined on the current value it doesn't change it.

def getAndUpdateZIO[R, E](f: A => ZIO[R, E, A])(implicit trace: Trace): ZIO[R, E, A]

Atomically modifies the Ref.Synchronized with the specified function, returning the value immediately before modification.

Atomically modifies the Ref.Synchronized with the specified function, returning the value immediately before modification.

final def modify[B](f: A => (B, A))(implicit trace: Trace): UIO[B]

Atomically modifies the Ref with the specified function, which computes a return value for the modification. This is a more powerful version of update.

Atomically modifies the Ref with the specified function, which computes a return value for the modification. This is a more powerful version of update.

def modifySomeZIO[R, E, B](default: B)(pf: PartialFunction[A, ZIO[R, E, (B, A)]])(implicit trace: Trace): ZIO[R, E, B]

Atomically modifies the Ref.Synchronized with the specified function, which computes a return value for the modification if the function is defined in the current value otherwise it returns a default value. This is a more powerful version of updateSome.

Atomically modifies the Ref.Synchronized with the specified function, which computes a return value for the modification if the function is defined in the current value otherwise it returns a default value. This is a more powerful version of updateSome.

def updateAndGetZIO[R, E](f: A => ZIO[R, E, A])(implicit trace: Trace): ZIO[R, E, A]

Atomically modifies the Ref.Synchronized with the specified function, returning the value immediately after modification.

Atomically modifies the Ref.Synchronized with the specified function, returning the value immediately after modification.

def updateSomeAndGetZIO[R, E](pf: PartialFunction[A, ZIO[R, E, A]])(implicit trace: Trace): ZIO[R, E, A]

Atomically modifies the Ref.Synchronized with the specified partial function. If the function is undefined on the current value it returns the old value without changing it.

Atomically modifies the Ref.Synchronized with the specified partial function. If the function is undefined on the current value it returns the old value without changing it.

def updateSomeZIO[R, E](pf: PartialFunction[A, ZIO[R, E, A]])(implicit trace: Trace): ZIO[R, E, Unit]

Atomically modifies the Ref.Synchronized with the specified partial function. If the function is undefined on the current value it doesn't change it.

Atomically modifies the Ref.Synchronized with the specified partial function. If the function is undefined on the current value it doesn't change it.

def updateZIO[R, E](f: A => ZIO[R, E, A])(implicit trace: Trace): ZIO[R, E, Unit]

Atomically modifies the Ref.Synchronized with the specified function.

Atomically modifies the Ref.Synchronized with the specified function.

Inherited methods

final def getAndSet(a: A)(implicit trace: Trace): UIO[A]

Atomically writes the specified value to the Ref, returning the value immediately before modification.

Atomically writes the specified value to the Ref, returning the value immediately before modification.

Inherited from:
Ref
final def getAndUpdate(f: A => A)(implicit trace: Trace): UIO[A]

Atomically modifies the Ref with the specified function, returning the value immediately before modification.

Atomically modifies the Ref with the specified function, returning the value immediately before modification.

Inherited from:
Ref
final def getAndUpdateSome(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[A]

Atomically modifies the Ref with the specified partial function, returning the value immediately before modification. If the function is undefined on the current value it doesn't change it.

Atomically modifies the Ref with the specified partial function, returning the value immediately before modification. If the function is undefined on the current value it doesn't change it.

Inherited from:
Ref
final def modifySome[B](default: B)(pf: PartialFunction[A, (B, A)])(implicit trace: Trace): UIO[B]

Atomically modifies the Ref with the specified partial function, which computes a return value for the modification if the function is defined on the current value otherwise it returns a default value. This is a more powerful version of updateSome.

Atomically modifies the Ref with the specified partial function, which computes a return value for the modification if the function is defined on the current value otherwise it returns a default value. This is a more powerful version of updateSome.

Inherited from:
Ref
final def update(f: A => A)(implicit trace: Trace): UIO[Unit]

Atomically modifies the Ref with the specified function.

Atomically modifies the Ref with the specified function.

Inherited from:
Ref
final def updateAndGet(f: A => A)(implicit trace: Trace): UIO[A]

Atomically modifies the Ref with the specified function and returns the updated value.

Atomically modifies the Ref with the specified function and returns the updated value.

Inherited from:
Ref
final def updateSome(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[Unit]

Atomically modifies the Ref with the specified partial function. If the function is undefined on the current value it doesn't change it.

Atomically modifies the Ref with the specified partial function. If the function is undefined on the current value it doesn't change it.

Inherited from:
Ref
final def updateSomeAndGet(pf: PartialFunction[A, A])(implicit trace: Trace): UIO[A]

Atomically modifies the Ref with the specified partial function. If the function is undefined on the current value it returns the old value without changing it.

Atomically modifies the Ref with the specified partial function. If the function is undefined on the current value it returns the old value without changing it.

Inherited from:
Ref