Atomics.waitAsync()

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

Atomics.waitAsync() 靜態方法會驗證共享記憶體位置是否包含給定值。如果記憶體位置與給定值不匹配,它會立即返回一個 value 屬性為字串 "not-equal" 的物件;如果設定的超時時間為零,則返回一個 value 屬性為字串 "timed-out" 的物件。否則,該方法會返回一個物件,其 value 屬性是一個 Promise,當呼叫 Atomics.notify() 時,該 Promise 會以 "ok" fulfilled,或者在超時到期時以 "timed-out" fulfilled。

Atomics.waitAsync()Atomics.notify() 一起使用,以共享記憶體中的值為基礎實現執行緒同步。如果同步值已更改,執行緒可以立即繼續執行;或者,當執行緒到達同步點時,它可以等待來自另一個執行緒的通知。

此方法僅適用於檢視 SharedArrayBufferInt32ArrayBigInt64Array。它是非阻塞的,並且與 Atomics.wait() 不同,可以在主執行緒上使用。由於它不會阻塞整個執行緒,因此您仍然需要小心,不要在 Promise 結算之前訪問共享記憶體。

語法

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

引數

typedArray

一個檢視 SharedArrayBufferInt32ArrayBigInt64Array

index

typedArray 中等待的位置。

value

要測試的預期值。

timeout 可選

等待時間(以毫秒為單位)。NaN(以及轉換為 NaN 的值,例如 undefined)將變為 Infinity。負值將變為 0

返回值

一個具有以下屬性的 Object

async

一個布林值,指示 value 屬性是否為 Promise

value

如果 asyncfalse,它將是一個字串,該字串為 "not-equal""timed-out"(僅當 timeout 引數為 0 時)。如果 asynctrue,它將是一個 Promise,該 Promise 以字串值 "ok""timed-out" fulfilled。Promise 永遠不會被 reject。

異常

TypeError

如果 typedArray 不是檢視 SharedArrayBufferInt32ArrayBigInt64Array,則會丟擲此異常。

RangeError

如果 indextypedArray 中超出界限,則丟擲。

示例

使用 waitAsync()

給定一個共享的 Int32Array

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

一個讀取執行緒正在睡眠,並等待位置 0,預期該位置的值為 0。result.value 將是一個 Promise。

js
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }

在讀取執行緒或另一個執行緒中,呼叫記憶體位置 0,並且 Promise 可以以 "ok" 解析。

js
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }

如果它沒有解析為 "ok",則共享記憶體位置中的值不是預期的值(value 將是 "not-equal" 而不是 Promise),或者已達到超時時間(Promise 將解析為 "time-out")。

規範

規範
ECMAScript® 2026 語言規範
# sec-atomics.waitasync

瀏覽器相容性

另見