Obtains a snapshot of the current value, and a setter for updating it.
Obtains a snapshot of the current value, and a setter for updating it.
The setter may noop (in which case false
is returned) if another concurrent
call to access
uses its setter first.
Once it has noop'd or been used once, a setter never succeeds again.
Satisfies:
r.access.map(_._1) == r.get
r.access.flatMap { case (v, setter) => setter(f(v)) } == r.tryUpdate(f).map(_.isDefined)
Sets the value to newValue
if the current value is expected
.
Sets the value to newValue
if the current value is expected
.
Note: reference equality is used here.
Obtains the current value.
Obtains the current value.
Since Ref
is always guaranteed to have a value, the returned action
completes immediately after being bound.
Replaces the current value with a
, returning the previous value.
Eventually sets the current value to the a
.
Eventually sets the current value to the a
.
The returned action completes after the reference has been lazily set.
Like tryModify
but does not complete until the update has been successfully made.
Like tryModifyState but retries the modification until successful.
Sets the current value to a
.
Sets the current value to a
.
The returned action completes after the reference has been successfully set.
Satisfies:
r.set(fa) *> r.get == fa
Like tryUpdate
but allows the update function to return an output value of
type B
.
Like tryUpdate
but allows the update function to return an output value of
type B
. The returned action completes with None
if the value is not updated
successfully and Some(b)
otherwise.
Update the value of this ref with a state computation.
Update the value of this ref with a state computation.
The current value of this ref is used as the initial state and the computed output state
is stored in this ref after computation completes. If a concurrent modification occurs,
None
is returned.
Attempts to modify the current value once, returning false
if another
concurrent modification completes between the time the variable is
read and the time it is set.
Modifies the current value using the supplied update function.
Modifies the current value using the supplied update function. If another modification
occurs between the time the current value is read and subsequently updated, the modification
is retried using the new value. Hence, f
may be invoked multiple times.
Satisfies:
r.update(_ => a) == r.set(a)
An asynchronous, concurrent mutable reference.
Provides safe concurrent access and modification of its content, but no functionality for synchronisation, which is instead handled by Deferred. For this reason, a
Ref
is always initialised to a value.The default implementation is nonblocking and lightweight, consisting essentially of a purely functional wrapper over an
AtomicReference
.