Atomics.wait()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since December 2021.
Atomics.wait()
静的メソッドは、共有メモリー位置に指定された値が含まれていることを確認し、含まれている場合は、覚醒通知またはタイムアウトを待つために休眠します。メモリー位置が指定された値と一致しない場合は "not-equal"
、 Atomics.notify()
によって覚醒した場合は "ok"
、タイムアウトが切れた場合は "timed-out"
という文字列を返します。
Atomics.wait()
と Atomics.notify()
は、共有メモリー内の値に基づいてスレッドの同期ができるようにするために一緒に使用されます。スレッドは、同期値が変更された場合、すぐに処理を続行することも、同期ポイントに到達したときに別のスレッドからの通知を待つこともできます。
このメソッドは、SharedArrayBuffer
のビューである Int32Array
または BigInt64Array
でのみ動作します。これはブロッキング操作であり、メインスレッドでは使用できません。このメソッドの非ブロック、非同期バージョンについては、Atomics.waitAsync()
をご覧ください。
構文
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)
引数
typedArray
-
SharedArrayBuffer
のビューであるInt32Array
またはBigInt64Array
index
-
待つ対象となる
typedArray
の中の位置。 value
-
検査で期待される値。
timeout
省略可-
待機時間(ミリ秒単位)。
NaN
(およびNaN
に変換される値、たとえばundefined
)はInfinity
になります。負の値は0
になります。
返値
文字列で、 "not-equal"
, "ok"
, "timed-out"
のいずれかです。
- 初期値
value
がindex
に格納されている値と等しくない場合、"not-equal"
が即座に返されます。 Atomics.notify()
の呼び出しによって目覚めた場合、期待される値が変更されているかどうかに関係なく、"ok"
が返されます。Atomics.notify()
によって目覚めなかった場合、スリープ待機が指定したtimeout
を超えたときに"timed-out"
が返されます。
例外
TypeError
-
次のいずれかの場合に発生します。
typedArray
が、SharedArrayBuffer
のビューであるInt32Array
またはBigInt64Array
でない場合。- 現在のスレッドをブロックできない場合(例えば、メインスレッドであるため)。
RangeError
-
index
がtypedArray
の範囲を超えている場合に発生します。
例
wait() の使用
次のような共有された Int32Array
があったとします。
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
読み取りスレッドは、指定された value
が指定された index
に格納されている値と一致するため、位置 0 で休眠して待機しています。
書き込みスレッドが、指定された typedArray
の位置 0 で Atomics.notify()
を呼び出すまで、読み取りスレッドは移動しません。
覚醒した後、位置 0 の値が書き込みスレッドによって変更されていない場合、読み取りスレッドは休眠状態に戻らず、処理を続行することに注意してください。
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123
書き手のスレッドは新しい値を格納し、待っているスレッドに書き込みが完了したことを知らせます。
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-atomics.wait |