Atomics.wait()

基线 广泛可用

此功能已稳定,可在许多设备和浏览器版本上运行。它自以下时间起在各个浏览器中可用: 2021 年 12 月.

**Atomics.wait()** 静态方法验证共享内存位置是否仍包含给定值,如果是则睡眠,等待唤醒通知或超时。它返回一个字符串,该字符串可以是 "ok""not-equal""timed-out"

**注意:**此操作仅适用于查看 SharedArrayBufferInt32ArrayBigInt64Array,并且可能不允许在主线程上使用。有关此方法的非阻塞异步版本,请参阅 Atomics.waitAsync()

语法

js
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)

参数

typedArray

查看 SharedArrayBufferInt32ArrayBigInt64Array

index

要等待的 typedArray 中的位置。

value

要测试的预期值。

timeout 可选

以毫秒为单位的等待时间。 NaN(以及转换为 NaN 的值,如 undefined)变为 Infinity。负值变为 0

返回值

一个字符串,可以是 "ok""not-equal""timed-out"

异常

TypeError

在以下情况之一中抛出

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 的浏览器中加载。

另请参阅