MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

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 として実行される。

返り値

"ok"、"not-equal""timed-out" いずれかの String

例外

  • typedArray が共有された Int32Array でない場合、TypeError が送出される。
  • indextypedArray の範囲を超えた位置を指している場合、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_memorytrue に設定することで利用できます。

[2] 現在実装中で、利用には次のオプションをつけて起動する必要があります:--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

[3] バージョン 46 と 47 では Atomics.futexWait() という名前で利用できます。また文字列の代わりに Atomics.OK、Atomics.TIMEDOUT、Atomics.NOTEQUAL を返します。

関連情報

ドキュメントのタグと貢献者

 このページの貢献者: chikoski
 最終更新者: chikoski,