cephalopod-sync-sharedarraybuffer
v1.0.1
Published
A collection of synchronization primitives for use with SharedArrayBuffer and Atomics
Downloads
8
Readme
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;