Skip to content

StdLib Atomics SharedArrayBuffer

Roger Johansson edited this page Jan 14, 2026 · 1 revision

Atomics and SharedArrayBuffer

Shared memory and atomic operations for multi-threaded JavaScript.


SharedArrayBuffer

A fixed-length raw binary data buffer that can be shared between workers.

Implementation Status: 100% Complete

Constructor

new SharedArrayBuffer(byteLength)
new SharedArrayBuffer(byteLength, { maxByteLength })  // Growable

Static Methods

Method Status Description
SharedArrayBuffer[Symbol.species] Implemented Returns constructor

Prototype Methods

Method Status Description
byteLength (getter) Implemented Current byte length
maxByteLength (getter) Implemented Max byte length for growable
resizable (getter) Implemented Is buffer growable
growable (getter) Implemented Alias for resizable
grow(newLength) Implemented Grows buffer (ES2024)
slice(start, end) Implemented Returns new SharedArrayBuffer copy

Atomics

Provides atomic operations on SharedArrayBuffer views.

Implementation Status: 77% (10/13 fully working, 3 limited)

Arithmetic Operations

Method Status Description
Atomics.add(ta, index, value) Implemented Atomic add, returns old value
Atomics.sub(ta, index, value) Implemented Atomic subtract, returns old value

Bitwise Operations

Method Status Description
Atomics.and(ta, index, value) Implemented Atomic AND, returns old value
Atomics.or(ta, index, value) Implemented Atomic OR, returns old value
Atomics.xor(ta, index, value) Implemented Atomic XOR, returns old value

Read/Write Operations

Method Status Description
Atomics.load(ta, index) Implemented Atomic read
Atomics.store(ta, index, value) Implemented Atomic write, returns value
Atomics.exchange(ta, index, value) Implemented Atomic swap, returns old value
Atomics.compareExchange(ta, index, expected, replacement) Implemented CAS operation

Wait/Notify Operations

Method Status Description
Atomics.wait(ta, index, value, timeout) Limited Always returns immediately
Atomics.waitAsync(ta, index, value, timeout) Limited Returns sync result, not Promise
Atomics.notify(ta, index, count) Limited Always returns 0

Utility Operations

Method Status Description
Atomics.isLockFree(size) Implemented True for sizes 1, 2, 4, 8

Implementation Notes

Thread Safety

Operations use lock (typedArray.Buffer) for synchronization rather than hardware atomics.

Wait/Notify Limitations

The runtime does not maintain a waiter queue:

  • wait() never blocks (returns "not-equal" or "timed-out" immediately)
  • waitAsync() returns synchronous result {async: false, value: status}
  • notify() always reports 0 agents notified

Supported TypedArrays

  • Int8Array, Uint8Array
  • Int16Array, Uint16Array
  • Int32Array, Uint32Array
  • BigInt64Array, BigUint64Array
  • Not supported: Float32Array, Float64Array

Wait/WaitAsync TypedArrays

Only Int32Array and BigInt64Array are valid for wait operations.

Files

File Purpose
StdLib/SharedArrayBuffer/SharedArrayBufferConstructor.cs Constructor
StdLib/SharedArrayBuffer/SharedArrayBufferPrototype.cs Prototype methods
StdLib/Atomics/AtomicsPrototype.cs Atomics object
JsTypes/JsSharedArrayBuffer.cs Core implementation

See Also

Clone this wiki locally