HORIZON HASKELLDocslts/ghc-10.0.x8fef28d2026-11-02Search packagesCtrl K
Theme: |

GHC 10.0.0.20260917 · lts/ghc-10.0.x · 8fef28d · 2026-11-02

Moduleconcurrent-extra-0.7.0.12Haskell98

Control.Concurrent.STM.Lock

This module provides an STM version of Control.Concurrent.Lock.

This module is intended to be imported qualified. We suggest importing it like:

import           Control.Concurrent.STM.Lock         ( Lock )
import qualified Control.Concurrent.STM.Lock as Lock ( ... )
Contents
  1. Creating locks
  2. Locking and unlocking
  3. Convenience functions
  4. Querying locks
Synopsis
newtypenewtype Lock

A lock is in one of two states: "locked" or "unlocked".

Instances1Eq
  • Eq LockDefined in concurrent-extra-0.7.0.12 · Control.Concurrent.STM.Lock

Creating locks

Locking and unlocking

valueacquire :: Lock -> STM ()
  • When the state is "locked" acquire will retry the transaction.

  • When the state is "unlocked" acquire will change the state to "locked".

valuetryAcquire :: Lock -> STM Bool

A non-blocking acquire.

  • When the state is "unlocked" tryAcquire changes the state to "locked" and returns True.

  • When the state is "locked" tryAcquire leaves the state unchanged and returns False.

valuerelease :: Lock -> STM ()

release changes the state to "unlocked" and returns immediately.

Note that it is an error to release a lock in the "unlocked" state!

Convenience functions

valuewith :: Lock -> IO a -> IO a

A convenience function which first acquires the lock and then performs the computation. When the computation terminates, whether normally or by raising an exception, the lock is released.

valuetryWith :: Lock -> IO a -> IO (Maybe a)

A non-blocking with. tryWith is a convenience function which first tries to acquire the lock. If that fails, Nothing is returned. If it succeeds, the computation is performed. When the computation terminates, whether normally or by raising an exception, the lock is released and Just the result of the computation is returned.

valuewait :: Lock -> STM ()
  • When the state is "locked", wait will retry the transaction

  • When the state is "unlocked" wait returns immediately.

wait does not alter the state of the lock.

Note that wait is just a convenience function which can be defined as:

wait l = acquire l >> release l

Querying locks

valuelocked :: Lock -> STM Bool

Determines if the lock is in the "locked" state.

Note that this is only a snapshot of the state. By the time a program reacts on its result it may already be out of date.