Options
All
  • Public
  • Public/Protected
  • All
Menu

Conceptually a smaphore can be used to manage a set of permits across different thrads. The semaphore keeps track of how many permits are available. Each call to acquire() blocks untill enough permits are available and takes all at once. No longer needed permits can be released by calling release(). This notifies blocked acquire() calls.

This implementation uses Atomics and a SharedArrayBuffer which holds the number of availabe permits. To use a semaphore across multiple WebWorkers the SharedArrayBuffer can be shared to the Worker instances.

Hierarchy

  • Semaphore

Index

Constructors

constructor

  • new Semaphore(int32Array: Int32Array): Semaphore
  • Creates a new semaphore object. The given Int32Array should be based on a SharedArrayBuffer, have length one and hold the number of currently availaber permits.

    Parameters

    • int32Array: Int32Array

      The typed array which holds the number of availabe permits. It has to have length of one and it has to be based on a SharedArrayBuffer.

    Returns Semaphore

Properties

Private _acquiredPermits

_acquiredPermits: number

Number of permits accuired by this instance.

Private _int32Array

_int32Array: Int32Array

The typed array which holds the number of availabe permits.

Accessors

acquiredPermits

  • get acquiredPermits(): number
  • Number of permits acquired by this instance.

    Returns number

availablePermits

  • get availablePermits(): number
  • Number of currently available permits.

    Returns number

buffer

  • get buffer(): SharedArrayBuffer
  • SharedArrayBuffer used by this semaphore.

    Returns SharedArrayBuffer

Methods

acquire

  • acquire(num?: number): void
  • Acquires a given number of permits from the semaphore. The call blocks untill enough permits are available and acquires all at once.

    Parameters

    • num: number = 1

      Number of permits to acquire.

    Returns void

acquireAsync

  • acquireAsync(num?: number): Promise<void>
  • Acquires a given number of permits from the semaphore. Calls to the function do not block like calls to acquire but immediately return with a promise. The promise resolves once all permis a available and acquired.

    This should be used in favor of acquire if Atomics.wait is not available (eg. on the main thread).

    Parameters

    • num: number = 1

      Number of permits to acquire.

    Returns Promise<void>

    A promise that resolves once all permits are acquired.

release

  • release(num?: number): void
  • Releases the given number of permits and returns them to the semaphore. It automatically notifies blocked acuire() and pending acquireAsync() calls.

    Parameters

    • num: number = 1

      Number of permits to release

    Returns void

Static createWithCapacity

  • createWithCapacity(capacity: number): Semaphore
  • Creates a new Semaphore initially holding the specified number of permits.

    Parameters

    • capacity: number

      Intially availabe number of permits

    Returns Semaphore

Legend

  • Constructor
  • Method
  • Private property
  • Static method

Generated using TypeDoc