Atomics.wait()

Atomics.wait() は静的なメソッドで、 Int32Array 中の指定された位置に指定された値が保存されているかどうかを検証し、検証できるまでスリープ、もしくはタイムアウトします。返値は "ok", "not-equal", "timed-out" のいずれかです。

注: この操作は共有された Int32Array に対してのみ可能で、またメインスレッドでは実行できません。

構文

Atomics.wait(typedArray, index, value[, timeout])

引数

typedArray
共有された Int32Array
index
待つ対象となる typedArray の中の位置。
value
期待される値。
timeout Optional
ミリ秒で表した待ち時間。時間が指定されなかった場合は Infinity

返値

String で、 "ok", "not-equal", or "timed-out" のいずれか。

例外

  • typedArray が共有された Int32Array でない場合、 TypeError が発生します。
  • indextypedArray の範囲を超えている場合は RangeError が発生します。

wait() の使用

次のような共有 Int32Array があったとします。

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

読み手のスレッドはスリープし、 0 番目の値が 0 であることを期待して待ちます。これが成立している間、処理は進みません。しかし、書き手のスレッドが新しい値を格納した場合、書き手のスレッドによって通知され、新しい値 (123) が返ります。

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);

仕様書

仕様書
ECMAScript (ECMA-262)
Atomics.wait の定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
waitChrome 完全対応 68
完全対応 68
未対応 60 — 63
補足
補足 Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This was a temporary removal while mitigations were put in place.
Edge 完全対応 79
完全対応 79
未対応 16 — 17
補足
補足 Support was removed to mitigate speculative execution side-channel attacks (Windows blog).
Firefox 完全対応 78
完全対応 78
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 From version 57: this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
未対応 55 — 57
未対応 48 — 55
無効
無効 From version 48 until version 55 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
未対応 46 — 48
補足 代替名 無効
補足 The method returns values Atomics.OK, Atomics.TIMEDOUT, and Atomics.NOTEQUAL, instead of the later-specified strings.
代替名 非標準の名前 futexWait を使用しています。
無効 From version 46 until version 48 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
IE 未対応 なしOpera 未対応 なしSafari 未対応 10.1 — 11.1WebView Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This is intended as a temporary measure until other mitigations are in place.
Chrome Android 未対応 60 — 63
補足
未対応 60 — 63
補足
補足 Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This is intended as a temporary measure until other mitigations are in place.
Firefox Android 完全対応 57
補足 無効
完全対応 57
補足 無効
補足 Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).
無効 From version 57: this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
未対応 55 — 57
未対応 48 — 55
無効
無効 From version 48 until version 55 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
未対応 46 — 48
補足 代替名 無効
補足 The method returns values Atomics.OK, Atomics.TIMEDOUT, and Atomics.NOTEQUAL, instead of the later-specified strings.
代替名 非標準の名前 futexWait を使用しています。
無効 From version 46 until version 48 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.
Opera Android 未対応 なしSafari iOS 未対応 10.3 — 11.3Samsung Internet Android 未対応 なし
補足
未対応 なし
補足
補足 Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This is intended as a temporary measure until other mitigations are in place.
nodejs 完全対応 8.10.0

凡例

完全対応  
完全対応
未対応  
未対応
実装ノートを参照してください。
実装ノートを参照してください。
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。
非標準の名前を使用しています。
非標準の名前を使用しています。

関連情報