superlock
v1.2.2
Published
The most simple mutex/semaphore implementation
Downloads
6,418
Maintainers
Readme
A mutex/semaphore implementation made easy to use.
Why
superlock aims to be:
- Simple: Designed for usage with
async
andawait
- 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