これは実験段階の機能です。
この機能は複数のブラウザで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザの将来のバージョンで変更になる可能性があることに注意してください。
Atomics
.wait()
は静的なメソッドで、Int32Array
中の指定された位置に指定された値が保存されているかどうかを検証し、検証できるまでスリープ、もしくはタイムアウトします。返り値は "ok"、
"not-equal"
、"timed-out"
のいずれかです。
付記: この操作は共有された Int32Array
に対してのみ可能で、しかもメインスレッドでは実行できません。
構文
Atomics.wait(typedArray, index, value[, timeout])
引数
typedArray
- 共有された
Int32Array
。 index
- 待つ対象となる
typedArray
中の位置。 value
- 期待される値。
timeout
Optional- ミリ秒で表した待ち時間。指定されない場合は
Infinity
として実行される。
返り値
"ok"、
"not-equal"
、"timed-out"
いずれかの String
。
例外
typedArray
が共有されたInt32Array
でない場合、TypeError
が送出される。index
がtypedArray
の範囲を超えた位置を指している場合、RangeError
が送出される。
例
Int32Array
を用意します:
var sab = new SharedArrayBuffer(1024); var int32 = new Int32Array(sab);
読み手のスレッドは、0 番目の値が 0 であることを期待してスリープします。それが満たされている間、この場合は 0 番目の値が 0 である間は処理が進みません。しかし書き手のスレッドが新しい値 (この場合は 123)をストアした場合、読み手のスレッドは読み手のスレッドによって起こされ、新しい値 (123)を取得します.
Atomics.wait(int32, 0, 0); console.log(int32[0]); // 123
書き手のスレッドは新しい値をストアし、待っているスレッドを起こします:
console.log(int32[0]); // 0; Atomics.store(int32, 0, 123); Atomics.wake(int32, 0, 1);
仕様
仕様 | 状態 | コメント |
---|---|---|
ECMAScript Shared Memory and Atomics Atomics.wait の定義 |
ドラフト | 初期定義 |
ブラウザ互換性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 未サポート [2] | 未サポート | 46 (46) [1] [3] | 未サポート | 未サポート | 未サポート |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | 未サポート | 未サポート | 46.0 (46) [1] | 未サポート | 未サポート | 未サポート |
[1] 設定で無効になっています。about:config で javascript.options.shared_memory
を true
に設定することで利用できます。
[2] 現在実装中で、利用には次のオプションをつけて起動する必要があります:--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer
[3] バージョン 46 と 47 では Atomics.futexWait()
という名前で利用できます。また文字列の代わりに Atomics.OK、
Atomics.TIMEDOUT、
Atomics.NOTEQUAL
を返します。