Offload functions to worker threads with shared memory primitives for Node.js.
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

at e46aca05dbf9a2204886d23f7ae3b34883f4e5c6 55 lines 1.4 kB view raw
1import { registerSync } from './reconstruct.ts'; 2 3export class Uint64Atomic { 4 static readonly byteSize = 8; 5 static readonly byteAlignment = 8; 6 private readonly view: BigUint64Array; 7 8 constructor(buffer?: SharedArrayBuffer, byteOffset?: number) { 9 const buf = buffer ?? new SharedArrayBuffer(8); 10 const offset = byteOffset ?? 0; 11 this.view = new BigUint64Array(buf, offset, 1); 12 } 13 14 load(): bigint { 15 return Atomics.load(this.view, 0); 16 } 17 18 store(value: bigint): void { 19 Atomics.store(this.view, 0, value); 20 } 21 22 add(value: bigint): bigint { 23 return Atomics.add(this.view, 0, value); 24 } 25 26 sub(value: bigint): bigint { 27 return Atomics.sub(this.view, 0, value); 28 } 29 30 and(value: bigint): bigint { 31 return Atomics.and(this.view, 0, value); 32 } 33 34 or(value: bigint): bigint { 35 return Atomics.or(this.view, 0, value); 36 } 37 38 xor(value: bigint): bigint { 39 return Atomics.xor(this.view, 0, value); 40 } 41 42 exchange(value: bigint): bigint { 43 return Atomics.exchange(this.view, 0, value); 44 } 45 46 compareExchange(expected: bigint, replacement: bigint): bigint { 47 return Atomics.compareExchange(this.view, 0, expected, replacement); 48 } 49 50 [Symbol.for('moroutine.shared')](): { tag: string; buffer: SharedArrayBuffer; byteOffset: number } { 51 return { tag: 'Uint64Atomic', buffer: this.view.buffer as SharedArrayBuffer, byteOffset: this.view.byteOffset }; 52 } 53} 54 55registerSync('Uint64Atomic', Uint64Atomic);