mutex-list
TypeScript icon, indicating that this package has built-in type declarations

0.0.1 • Public • Published

MutexList

Create a managed object collection backed by a node Buffer and share the data across threads.

Usage

import { MutexList } from "mutex-list";
 
const OBJECT_COUNT = 10000;
const OBJECT_SIZE = 30; // bytes
 
let list = new MutexList(
  OBJECT_COUNT,
  OBJECT_SIZE,
);
 
// this is the critical area SharedArrayBuffer
const criticalBuffer = list.criticalBuffer;
// this is the data SharedArrayBuffer
const dataBuffer = list.dataBuffer;
 
worker.postMessage({ criticalBuffer, dataBuffer });

Inside a Worker, do the following things:

const OBJECT_COUNT = 10000;
const OBJECT_SIZE = 30; // bytes
 
let list;
parentPort.on("message", (data) => {
  list = new MutexList(
    OBJECT_COUNT,
    OBJECT_SIZE,
    data.criticalBuffer,
    data.dataBuffer,
  );
 
  // lock a record by it's index. This locks the thread synchronously using Atomic.wait()
  const buffer: Buffer = list.lock(index);
 
  // do something with buffer
  buffer.fill(255);
 
  // free the record in the list
  list.unlock(index);
});

API

constructor

The constructor creates a mutex list

constructor(
  count?: number, // The number of records in the mutex list
  size?: number, // how many bytes per record
  criticalBuffer?: SharedArrayBuffer, // the critical section buffer
  dataBuffer?: SharedArrayBuffer, // the data section buffer
);

lock

Lock a record by it's index. This method stops the current thread from executing synchronously using Atomic.wait() and Atomic.compareExchange(). This method returns a node Buffer object once the record is locked.

class MutexList {
  lock(index: number): Buffer;
}

unlock

Unlock a record by it's index. This method notifies a single thread that has called lock(), and frees the record using Atomic.notify() and Atomic.compareExchange(). This method returns void.

class MutexList {
  unlock(index: number): void;
}

Readme

Keywords

none

Package Sidebar

Install

npm i mutex-list

Weekly Downloads

0

Version

0.0.1

License

MIT

Unpacked Size

6.19 kB

Total Files

8

Last publish

Collaborators

  • jtenner