Skip to content

TReentrantLock

22 exports Added in v2.0.0 Source

Constructors

make

Added in v2.0.0 Source

Makes a new reentrant read/write lock.

Signature

declare const make: STM.STM<TReentrantLock>;

Models

TReentrantLock interface

Added in v2.0.0 Source

A TReentrantLock is a reentrant read/write lock. Multiple readers may all concurrently acquire read locks. Only one writer is allowed to acquire a write lock at any given time. Read locks may be upgraded into write locks. A fiber that has a write lock may acquire other write locks or read locks.

The two primary methods of this structure are readLock, which acquires a read lock in a scoped context, and writeLock, which acquires a write lock in a scoped context.

Although located in the STM package, there is no need for locks within STM transactions. However, this lock can be quite useful in effectful code, to provide consistent read/write access to mutable state; and being in STM allows this structure to be composed into more complicated concurrent structures that are consumed from effectful code.

Signature

interface TReentrantLock extends Proto {}

Mutations

acquireRead

Added in v2.0.0 Source

Acquires a read lock. The transaction will suspend until no other fiber is holding a write lock. Succeeds with the number of read locks held by this fiber.

Signature

declare const acquireRead: (self: TReentrantLock) => STM.STM<number>;

acquireWrite

Added in v2.0.0 Source

Acquires a write lock. The transaction will suspend until no other fibers are holding read or write locks. Succeeds with the number of write locks held by this fiber.

Signature

declare const acquireWrite: (self: TReentrantLock) => STM.STM<number>;

Retrieves the number of acquired read locks for this fiber.

Signature

declare const fiberReadLocks: (self: TReentrantLock) => STM.STM<number>;

Retrieves the number of acquired write locks for this fiber.

Signature

declare const fiberWriteLocks: (self: TReentrantLock) => STM.STM<number>;

lock

Added in v2.0.0 Source

Just a convenience method for applications that only need reentrant locks, without needing a distinction between readers / writers.

See TReentrantLock.writeLock.

Signature

declare const lock: (self: TReentrantLock) => Effect.Effect<number, never, Scope.Scope>;

locked

Added in v2.0.0 Source

Determines if any fiber has a read or write lock.

Signature

declare const locked: (self: TReentrantLock) => STM.STM<boolean>;

readLock

Added in v2.0.0 Source

Obtains a read lock in a scoped context.

Signature

declare const readLock: (self: TReentrantLock) => Effect.Effect<number, never, Scope.Scope>;

readLocked

Added in v2.0.0 Source

Determines if any fiber has a read lock.

Signature

declare const readLocked: (self: TReentrantLock) => STM.STM<boolean>;

readLocks

Added in v2.0.0 Source

Retrieves the total number of acquired read locks.

Signature

declare const readLocks: (self: TReentrantLock) => STM.STM<number>;

releaseRead

Added in v2.0.0 Source

Releases a read lock held by this fiber. Succeeds with the outstanding number of read locks held by this fiber.

Signature

declare const releaseRead: (self: TReentrantLock) => STM.STM<number>;

releaseWrite

Added in v2.0.0 Source

Releases a write lock held by this fiber. Succeeds with the outstanding number of write locks held by this fiber.

Signature

declare const releaseWrite: (self: TReentrantLock) => STM.STM<number>;

withLock

Added in v2.0.0 Source

Runs the specified workflow with a lock.

Signature

declare const withLock: {
  (self: TReentrantLock): <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>;
  <A, E, R>(effect: Effect<A, E, R>, self: TReentrantLock): Effect<A, E, R>;
};

withReadLock

Added in v2.0.0 Source

Runs the specified workflow with a read lock.

Signature

declare const withReadLock: {
  (self: TReentrantLock): <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>;
  <A, E, R>(effect: Effect<A, E, R>, self: TReentrantLock): Effect<A, E, R>;
};

Runs the specified workflow with a write lock.

Signature

declare const withWriteLock: {
  (self: TReentrantLock): <A, E, R>(effect: Effect<A, E, R>) => Effect<A, E, R>;
  <A, E, R>(effect: Effect<A, E, R>, self: TReentrantLock): Effect<A, E, R>;
};

writeLock

Added in v2.0.0 Source

Obtains a write lock in a scoped context.

Signature

declare const writeLock: (self: TReentrantLock) => Effect.Effect<number, never, Scope.Scope>;

writeLocked

Added in v2.0.0 Source

Determines if a write lock is held by some fiber.

Signature

declare const writeLocked: (self: TReentrantLock) => STM.STM<boolean>;

writeLocks

Added in v2.0.0 Source

Computes the number of write locks held by fibers.

Signature

declare const writeLocks: (self: TReentrantLock) => STM.STM<number>;

Other

Symbols

Signature

declare const TReentrantLockTypeId: unique symbol;

TReentrantLockTypeId type

Added in v2.0.0 Source

Signature

type TReentrantLockTypeId = typeof TReentrantLockTypeId;