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.

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. AtomicCell
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new AtomicCell()

Abstract Value Members

  1. abstract def evalGetAndUpdate(f: (A) => F[A]): F[A]

    Updates the current value using the provided effectual function, and returns the previous value.

  2. abstract def evalModify[B](f: (A) => F[(A, B)]): F[B]

    Like evalUpdate but allows the update function to return an output value.

  3. abstract def evalUpdate(f: (A) => F[A]): F[Unit]

    Like update but using an effectual function; which is guaranteed to run only once.

  4. abstract def evalUpdateAndGet(f: (A) => F[A]): F[A]

    Updates the current value using the provided effectual function, and returns the updated value.

  5. abstract def get: F[A]

    Obtains the current value.

  6. abstract def modify[B](f: (A) => (A, B)): F[B]

    Like update but allows the update function to return an output value.

  7. abstract def set(a: A): F[Unit]

    Sets the current value to a.

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  6. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  7. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  9. def getAndSet(a: A): F[A]

    Replaces the current value with a, returning the previous value.

  10. def getAndUpdate(f: (A) => A): F[A]

    Updates the current value using the provided function, and returns the previous value.

  11. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  12. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  13. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  14. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  17. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  18. def toString(): String
    Definition Classes
    AnyRef → Any
  19. def update(f: (A) => A): F[Unit]

    Modifies the current value using the supplied update function.

  20. def updateAndGet(f: (A) => A): F[A]

    Updates the current value using the provided function, and returns the updated value.

  21. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  22. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  23. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped