-
Notifications
You must be signed in to change notification settings - Fork 1
StdLib Atomics SharedArrayBuffer
Roger Johansson edited this page Jan 14, 2026
·
1 revision
Shared memory and atomic operations for multi-threaded JavaScript.
A fixed-length raw binary data buffer that can be shared between workers.
Implementation Status: 100% Complete
new SharedArrayBuffer(byteLength)
new SharedArrayBuffer(byteLength, { maxByteLength }) // Growable| Method | Status | Description |
|---|---|---|
SharedArrayBuffer[Symbol.species] |
Implemented | Returns constructor |
| 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 |
Provides atomic operations on SharedArrayBuffer views.
Implementation Status: 77% (10/13 fully working, 3 limited)
| 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 |
| 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 |
| 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 |
| 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 |
| Method | Status | Description |
|---|---|---|
Atomics.isLockFree(size) |
Implemented | True for sizes 1, 2, 4, 8 |
Operations use lock (typedArray.Buffer) for synchronization rather than hardware atomics.
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
-
Int8Array,Uint8Array -
Int16Array,Uint16Array -
Int32Array,Uint32Array -
BigInt64Array,BigUint64Array -
Not supported:
Float32Array,Float64Array
Only Int32Array and BigInt64Array are valid for wait operations.
| File | Purpose |
|---|---|
StdLib/SharedArrayBuffer/SharedArrayBufferConstructor.cs |
Constructor |
StdLib/SharedArrayBuffer/SharedArrayBufferPrototype.cs |
Prototype methods |
StdLib/Atomics/AtomicsPrototype.cs |
Atomics object |
JsTypes/JsSharedArrayBuffer.cs |
Core implementation |
- StdLib-TypedArray - TypedArray views