abstract class AtomicCell[F[_], A] extends AnyRef
A synchronized, concurrent, mutable reference.
Provides safe concurrent access and modification of its contents, by ensuring only one fiber
can operate on them at the time. Thus, all operations except get
may semantically block the
calling fiber.
final class ParkingLot(data: AtomicCell[IO, Vector[Boolean]], rnd: Random[IO]) { def getSpot: IO[Option[Int]] = data.evalModify { spots => val availableSpots = spots.zipWithIndex.collect { case (true, idx) => idx } rnd.shuffleVector(availableSpots).map { shuffled => val acquired = shuffled.headOption val next = acquired.fold(spots)(a => spots.updated(a, false)) // mark the chosen spot as taken (next, shuffled.headOption) } } }
- Source
- AtomicCell.scala
- See also
cats.effect.kernel.Ref for a non-blocking alternative.
- Alphabetic
- By Inheritance
- AtomicCell
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new AtomicCell()
Abstract Value Members
- abstract def evalGetAndUpdate(f: (A) => F[A]): F[A]
Updates the current value using the provided effectual function, and returns the previous value.
- abstract def evalModify[B](f: (A) => F[(A, B)]): F[B]
Like
evalUpdate
but allows the update function to return an output value. - abstract def evalUpdate(f: (A) => F[A]): F[Unit]
Like
update
but using an effectual function; which is guaranteed to run only once. - abstract def evalUpdateAndGet(f: (A) => F[A]): F[A]
Updates the current value using the provided effectual function, and returns the updated value.
- abstract def get: F[A]
Obtains the current value.
- abstract def modify[B](f: (A) => (A, B)): F[B]
Like
update
but allows the update function to return an output value. - abstract def set(a: A): F[Unit]
Sets the current value to
a
.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- def getAndSet(a: A): F[A]
Replaces the current value with
a
, returning the previous value. - def getAndUpdate(f: (A) => A): F[A]
Updates the current value using the provided function, and returns the previous value.
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- def update(f: (A) => A): F[Unit]
Modifies the current value using the supplied update function.
- def updateAndGet(f: (A) => A): F[A]
Updates the current value using the provided function, and returns the updated value.
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()