1.0.1 • Published 7 years ago

cephalopod-sync-sharedarraybuffer v1.0.1

Weekly downloads
3
License
MIT
Repository
github
Last release
7 years ago

Cephalopod

npm install --save cephalopod-sync-sharedarraybuffer

A collection of synchronization primitives for use with SharedArrayBuffer and Atomics

!Note This module requires Atomics and SharedArrayBuffer. At the time of writing, only Firefox Nightly and Chrome Canary are compatible

Included primitives (more to come)

  • Mutex (binary)
  • Semaphore

Usage (UMD module)

CommonJS / Nodejs

const Cephalopod = require("cephalopod-sync-sharedarraybuffer");

ES6 / Typescript

import { Mutex, Semaphore } from "cephalopod-sync-sharedarraybuffer";
// or
import * as Cephalopod from "cephalopod-sync-sharedarraybuffer";

Browser

<script src="node_modules/cephalopod-sync-sharedarraybuffer/dist/lib.js"></script>
<script>
   window.Cephalopod;
</script>

Mutex

Binary mutex that protects a SharedArrayBuffer

Construct a view of a mutex in a buffer at offset 0

const Mutex = Cephalopod.Mutex;
const mutex = new Mutex(new SharedArrayBuffer(Mutex.sizeof), 0);

Mutex will be unlocked if created on a new zero'd out array. Use init if array is not zero'd out.

mutex.init();

Block until lock is obtained

mutex.lock();

Unlock mutex

mutex.unlock();

Grab lock if its available, otherwise return false

if (mutex.tryLock()) {
   // Do stuff
   mutex.unlock();
}

Semaphore

Construct a view of a semaphore in a buffer at offset 0

const Semaphore = Cephalopod.Semaphore;
const semaphore = new Semaphore(new SharedArrayBuffer(Semaphore.sizeof), 0);

Initialize the semaphore counter to 10

semaphore.init(10);

Increment the counter

semaphore.post();

Decrement the counter, and block if counter < 0

semaphore.wait();

Decrement the counter if it is > 0, otherwise return false

if (semaphore.tryWait()) {
   // do stuff
}

Misc

Get the size of a sync primitive

Semaphore.sizeof;
semaphore.sizeof;
Mutex.sizeof;
mutex.sizeof;