Atomics.wait()
**Atomics.wait()
** 静态方法验证共享内存位置是否仍包含给定值,如果是则睡眠,等待唤醒通知或超时。它返回一个字符串,该字符串可以是 "ok"
、"not-equal"
或 "timed-out"
。
**注意:**此操作仅适用于查看 SharedArrayBuffer
的 Int32Array
或 BigInt64Array
,并且可能不允许在主线程上使用。有关此方法的非阻塞异步版本,请参阅 Atomics.waitAsync()
。
语法
js
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)
参数
typedArray
-
查看
SharedArrayBuffer
的Int32Array
或BigInt64Array
。 index
-
要等待的
typedArray
中的位置。 value
-
要测试的预期值。
timeout
可选-
以毫秒为单位的等待时间。
NaN
(以及转换为NaN
的值,如undefined
)变为Infinity
。负值变为0
。
返回值
一个字符串,可以是 "ok"
、"not-equal"
或 "timed-out"
。
异常
TypeError
-
在以下情况之一中抛出
- 如果
typedArray
不是查看SharedArrayBuffer
的Int32Array
或BigInt64Array
。 - 如果当前线程无法被阻塞(例如,因为它为主线程)。
- 如果
RangeError
-
如果
index
超出typedArray
的范围,则抛出。
示例
使用 wait()
给定一个共享的 Int32Array
js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
读取线程正在休眠并等待位置 0,该位置预计为 0。只要为真,它就不会继续。但是,一旦写入线程存储了新值,它将由写入线程通知并返回新值 (123)。
js
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123
写入线程存储一个新值,并在写入后通知等待线程
js
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);
规范
规范 |
---|
ECMAScript 语言规范 # sec-atomics.wait |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。