Options
All
  • Public
  • Public/Protected
  • All
Menu

Class UniqueLock

Mutex wrapper for the safe write lock.

The module UniqueLock is a collection of general purpose functions wrapping mutex for ensuring the safe lock. If you lock a mutex (with your business logic code) through any function of the UniqueLock module, the mutex would be automatically unlocked after your business, even if an error has been occured in your business.

author

Jeongho Nam - https://github.com/samchon

Hierarchy

  • UniqueLock

Index

Type aliases

Static Closure

Closure: () => void | Promise<void>

Type of closure function defining your business logic.

Type declaration

    • (): void | Promise<void>
    • Returns void | Promise<void>

Methods

Static lock

  • lock<Mutex>(mutex: Mutex, closure: Closure): Promise<void>
  • Write locks a mutex with your business logic code.

    Monopolies a mutex until be the closure has been completed. If there're someone who have already monopolied or shared the mutex, the function call would be blocked until all of them return their acquisitions by calling ILockable.unlock or ISharedLockable.unlock_shared methods.

    When succeeded to monopoly the mutex, the lock function will call the closure, a custom function definig your business. After the closure function be returned, the lock function automatically unlocks the mutex, even if the closure function throws any error.

    Therefore, when using this lock function, you don't need to consider about returning the lock acquistion after your business. It would just be done automatically.

    throw

    Exception would be thrown if the closure function throws any error.

    Type parameters

    Parameters

    • mutex: Mutex

      Target mutex to write lock.

    • closure: Closure

      A function defining your business.

    Returns Promise<void>

Static try_lock

  • try_lock<Mutex>(mutex: Mutex, closure: Closure): Promise<boolean>
  • Tries to write lock a mutex with your business.

    Attempts to monopoly a mutex without blocking. If succeeded to monopoly the mutex immediately, it returns true after calling the closure*. Otherwise there's someone who has already monopolied or shared the mutex, the function gives up the trial immediately and returns false directly without calling the *closure.

    When succeeded to monopoly the mutex, the try_lock function will call the closure, a custom function definig your business. After the closure function be returned, the try_lock function automatically unlocks the mutex, even if the closure function throws any error.

    Therefore, when using this try_lock function, you don't need to consider about returning the lock acquistion after your business. It would just be done automatically.

    throw

    Exception would be thrown if the closure function throws any error.

    Type parameters

    • Mutex: Pick<ILockable, "try_lock" | "unlock">

    Parameters

    • mutex: Mutex

      Target mutex to try write lock.

    • closure: Closure

      A function defining your business.

    Returns Promise<boolean>

    Whether succeeded to monopoly the mutex or not.

Static try_lock_for

  • try_lock_for<Mutex>(mutex: Mutex, ms: number, closure: Closure): Promise<boolean>
  • Tries to write lock a mutex with your business until timeout.

    Attempts to monopoly a mutex until timeout. If succeeded to monopoly the mutex until the timeout, it returns true after calling the closure*. Otherwise failed to acquiring the lock in the given time, the function gives up the trial and returns false without calling the *closure.

    Failed to acquiring the lock in the given time (returns false), it means that there's someone who has already monopolied or ISharedLockable.lock the mutex and does not return it over the timeout.

    When succeeded to monopoly the mutex, the try_lock_for function will call the closure, a custom function definig your business. After the closure function be returned, the try_lock_for function automatically unlocks the mutex and returns true, even if the closure function throws any error.

    Therefore, when using this try_lock_for function, you don't need to consider about returning the lock acquistion after your business. It would just be done automatically.

    throw

    Exception would be thrown if the closure function throws any error.

    Type parameters

    Parameters

    • mutex: Mutex

      Target mutex to try write lock until timeout.

    • ms: number

      The maximum miliseconds for waiting.

    • closure: Closure

      A function defining your business.

    Returns Promise<boolean>

    Whether succeeded to monopoly the mutex or not.

Static try_lock_until

  • try_lock_until<Mutex>(mutex: Mutex, at: Date, closure: Closure): Promise<boolean>
  • Tries to write lock a mutex with your business until time expiration.

    Attempts to monopoly a mutex until time expiration. If succeeded to monopoly the mutex until the time expiration, it returns true after calling the closure*. Otherwise failed to acquiring the lock in the given time, the function gives up the trial and returns false without calling the *closure.

    Failed to acquiring the lock in the given time (returns false), it means that there's someone who has already monopolied or ISharedLockable.lock the mutex and does not return it over the time expiration.

    When succeeded to monopoly the mutex, the try_lock_until function will call the closure, a custom function definig your business. After the closure function be returned, the try_lock_until function automatically unlocks the mutex and returns true, even if the closure function throws any error.

    TTherefore, when using this try_lock_until function, you don't need to consider about returning the lock acquistion after your business. It would just be done automatically.

    throw

    Exception would be thrown if the closure function throws any error.

    Type parameters

    Parameters

    • mutex: Mutex

      Target mutex to try write lock until time expiration.

    • at: Date

      The maximum time point to wait.

    • closure: Closure

      A function defining your business.

    Returns Promise<boolean>

    Whether succeeded to monopoly the mutex or not.

Generated using TypeDoc