Atomics.waitAsync()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Atomics.waitAsync()
静的メソッドは、共有メモリー位置が指定された値を含むことを確認し、メモリー位置が指定された値と一致しない場合は文字列 "not-equal"
を含む value
プロパティを持つオブジェクトを即座に返し、タイムアウトが 0 に設定されている場合は "timed-out"
を返します。それ以外の場合、このメソッドは、value
プロパティが Promise
であるオブジェクトを返し、これは Atomics.notify()
が呼び出されたときに "ok"
、またはタイムアウトが切れたときに "timed-out"
で履行されます。
Atomics.waitAsync()
および Atomics.notify()
を一緒に使用すると、共有メモリー内の値に基づいてスレッドの同期を有効にすることができます。スレッドは、同期値が変更された場合、すぐに処理を続行することも、同期ポイントに到達したときに別のスレッドからの通知を待つこともできます。
このメソッドは、 SharedArrayBuffer
のビューである Int32Array
または BigInt64Array
でのみ動作します。これはノンブロッキングであり、Atomics.wait()
とは異なり、メインスレッドで使用することができます。スレッド全体をブロックしないため、プロミスが決定する前に共有メモリーにアクセスしないように注意する必要があります。
構文
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
引数
typedArray
-
SharedArrayBuffer
のビューであるInt32Array
またはBigInt64Array
。 index
-
待機する
typedArray
内の位置。 value
-
検査で期待される値。
timeout
省略可-
待機時間をミリ秒単位で指定します。
NaN
(およびNaN
に変換される値、例えばundefined
)はInfinity
となります。負の値は0
となります。
返値
例外
TypeError
-
typedArray
が、SharedArrayBuffer
のビューであるInt32Array
またはBigInt64Array
でない場合に発生します。 RangeError
-
index
がtypedArray
の範囲を超えている場合に発生します。
例
waitAsync() の使用
共有された Int32Array
があったとします。
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
読み取りスレッドは、0 であると思われる位置 0 で休眠して待機しています。
result.value
はプロミスになります。
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
読み込みスレッドまたは別のスレッドで、メモリー位置 0 が呼び出され、プロミスは "ok"
で解決できます。
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
"ok"
に解決されない場合、共有メモリーの場所の値が期待した値ではなかったか(value
はプロミスではなく "not-equal"
になります)、タイムアウトに達したということです(プロミスは "time-out"
に解決されます)。
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-atomics.waitasync |