UNPKG

dahlia-concurrency

Version:

High-level concurrency primitives and patterns for Node.js using worker_threads (queues, semaphore, mutex, worker pool, scheduler, and more)

22 lines (18 loc) 467 B
class BinarySemaphore { constructor(sharedBuffer) { this.data = new Int32Array(sharedBuffer); Atomics.store(this.data, 0, 1); // 1 - is free // 0 - is busy } async acquire() { while (Atomics.compareExchange(this.data, 0, 1, 0) !== 1) { await new Promise((resolve) => setImmediate(resolve)); } } release() { Atomics.store(this.data, 0, 1); Atomics.notify(this.data, 0, 1); } } module.exports = { BinarySemaphore };