🔴 Scala Advanced

What is the Scala STM (Software Transactional Memory) model?

Answer

Software Transactional Memory (STM) provides composable, atomic operations on shared memory without locks. Scala has two STM implementations: scala-stm and ZIO STM. In ZIO STM: TRef is a transactional reference. Compose atomic operations: val transfer = for { aBalance <- accountA.get; bBalance <- accountB.get; _ <- accountA.set(aBalance - amount); _ <- accountB.set(bBalance + amount) } yield (). Execute: transfer.commit. The runtime automatically retries the transaction if any read value has changed (optimistic concurrency). If impossible to complete, use STM.retry to block until conditions are met. STM eliminates deadlocks (no locks), livelocks, and priority inversion — common problems with manual synchronization. It is composable — multiple transactional operations combine into one atomic transaction. ZIO STM also provides TQueue, TSemaphore, and TMap for concurrent data structures.