1.2.1 • Published 8 months ago

superlock v1.2.1

Weekly downloads
-
License
MIT
Repository
github
Last release
8 months ago

Last version Coverage Status NPM Status

A mutex/semaphore implementation made easy to use.

Why

superlock aims to be:

  • Simple: Designed for usage with async and await
  • Powerful: Mutex & Semaphore patterns supported
  • Secure: Auto lock release toa void dead locks
  • Lightweight: No dependencies, just ~50 LOC
  • Well-tested: 100% code coverage

Install

$ npm install superlock --save

Usage

as mutex

The lock is a mutex by default:

const { setTimeout } = require('timers/promises')
const { withLock } = require('superlock')

const lock = withLock()

const executions = await Promise.all(
  [...Array(10).keys()].map(index =>
    lock(async () => {
      await setTimeout(Math.random() * 100)
      return index
    })
  )
)

console.log(executions)

as semaphore

Just call withLock(n) being n the maximum of concurrency desired for the lock.

API

withLock(concurrency=1)

It returns a function that can be used to wrap any code you want to execute with concurrency control:

const { withLock } = require('superlock')

const lock = withLock()

await lock(() => {
  /* your code execution */
})

The lock will be automatically released after your code execution is done even if an error occurred, avoiding deadlock situations.

concurrency

Type: number Default: 1

It sets the maximum of concurrency allowed for the lock.

.isLocked()

Type: boolean

It returns false if there is at least one free concurrency slots in the lock.

License

superlock © Kiko Beats, released under the MIT License. Authored and maintained by Kiko Beats with help from contributors.

kikobeats.com · GitHub Kiko Beats · X @Kikobeats

1.2.0

10 months ago

1.2.1

8 months ago

1.2.0-1

10 months ago

1.2.0-0

10 months ago

1.1.5

10 months ago

1.1.4

10 months ago

1.1.3

1 year ago

1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

3 years ago

1.0.0

3 years ago

0.0.1

3 years ago

0.0.0

3 years ago