rwmutex

Read-Write Mutex with JavaScript Promises. Inspired by Golang's sync.RWMutex.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
rwmutex
001.0.05 years ago5 years agoMinified + gzip package size for rwmutex in KB

Readme

RWMutext
npm Build Status
A simple read-write mutex/lock using JavaScript Promises. This is inspired by Golang's sync.RWMutex.

Install

Install via NPM:
npm i rwmutex --save

Usage

This package exports a RWMutex class.
import RWMutex from "rwmutex";
// or
const RWMutex = require("rwmutex");

Create a RWMutex with the constructor. You can optionally pass in a string label for identifying the mutex in debugging. Each mutex operates independently, they will not block each other when locked.
const mutex = new RWMutex();

To create a typical lock, that blocks all future locks, use the .lock() method. Typically this is used when writing data. This returns a promise that will resolve when unblocked. It returns the unlock method that must be called to unblock the mutex.
function safeWrite() {
  return mutex.lock().then((unlock) => {
    // write data to database or other mutating task

    // and later
    unlock();
  });
}

To create a read lock, use the .rlock() method. This method is very similar to .lock(), but can be called in parallel with other calls to .rlock() without blocking. Calls to .rlock() will block future calls to .lock().
function safeRead() {
  return mutex.rlock().then((unlock) => {
    // read data from database or other non-mutating task

    // and later
    unlock();
  });
}