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となります。
返値
以下のプロパティを持つオブジェクト (Object) です。
例外
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> |
ブラウザーの互換性
Loading…