SharedArrayBuffer对象

表示一个通用、固定长度的原始二进制数据缓冲区
可以在共享内存上创建视图,不能被分离

  • 语法
    new ShardArrayBuffer(length)
    length:数据缓冲区的大小,以字节(byte)为单位

Atomics对象

提供一组静态方法对 ShardArrayBuffer 对象进行原子操作
Atomics 属性、方法都是静态

原子操作多线程同步执行

  • 原子操作方法

Atomics.add(typedArray,idnex,value)
Atomics.add(typedArray,idnex,value)

给定值加到数组里某个指定位置,返回该位置的旧值
typedArray:整型的类型数组 Int8Array,Int16Array,Uint8Array
1
2
3
4
5
6
7
8
9
10
let arr = new SharedArrayBuffer(16)
let view = new Int8Array(arr)

Atomics.add(view, 2, 22)
Array.from(view)

// Int8Array(16)
// Int16Array(16)
// Int16Array(16)
// Uint8Array(16)

Atomics.load(typedArray,index)

获取数组(view)中给定位置的值

Atomics.and(typedArray,index,value)

将给定的值与数组上的值进行按位与操作

Atomics.or(typedArray,index,value)

将给定的值与数组上的值进行按位或操作

Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)

当指定位置的值等于 'expectedValue' 值的时候,用 'replacementValue' 替换  'expectedValue' 

Atomics.exchange(typedArray, index, value)

替换指定位置的值

Atomics.sub(typedArray, index, value)

指定位置值减去 value

Atomics.wake(typedArray, index, count)

唤醒等待队列中休眠的某些代理

Atomics.wait(typedArray,index,value,[timeout])

验证 Int32Array 中的给定位置是否仍包含给定值, 如果休眠则等待唤醒或超时。它返回一个字符串, 可以是 “ok”、“不等于” 或 “超时”。