これは実験段階の機能です。
この機能は複数のブラウザで開発中の状態にあります。互換性テーブルをチェックしてください。また、実験段階の機能の構文と挙動は、仕様変更に伴い各ブラウザの将来のバージョンで変更になる可能性があることに注意してください。

Atomics オブジェクトは、静的なメソッドのアトミック演算を提供します。これらのメソッドは、SharedArrayBuffer オブジェクトで使用されます。

アトミック演算は、Atomics モジュール上にインストールされます。他のグローバルオブジェクトと異なり、Atomics はコンストラクタではありません。new 演算子 を付けて使用することや Atomics オブジェクトを関数として実行することはできません。Atomics のすべてのプロパティとメソッドは静的です (例えば、Math オブジェクトの場合と同じです)。

メソッド

不可分操作

メモリが共有されている場合、複数のスレッドがメモリ内の同じデータを読み書きできます。アトミック演算では、予測される値の書き込みと読み込みを保証するため、次の演算が開始される前に現在の演算が完了し、その演算が割り込まれないようにします。

Atomics.add()
配列の指定位置に値を追加します。その位置の古い値を返します。
Atomics.and()
配列の指定位置の値と指定した値の論理積 (AND) をビット演算します。その位置の古い値を返します。
Atomics.compareExchange()
指定した値が等しければ、配列の指定位置の値と指定した値を交換して格納します。古い値を返します。
Atomics.exchange()
配列の指定位置の値と指定した値を交換して格納します。古い値を返します。
Atomics.load()
配列の指定位置の値を返します。
Atomics.or()
配列の指定位置の値と指定した値の論理和 (OR) をビット演算します。その位置の古い値を返します。
Atomics.store()
配列の指定位置に指定した値を格納します。その値を返します。
Atomics.sub()
配列の指定位置の値から指定した値を減算します。その位置の古い値を返します。
Atomics.xor()
配列の指定位置の値と指定した値の排他的論理和 (XOR) をビット演算します。その位置の古い値を返します。

wait メソッドと wake メソッド

wait() メソッドと wake() メソッドは、Linux の futex ("fast user-space mutex") を原型としており、特定の条件が true になるまで待つ手段を提供します。一般的にはブロッキングコンストラクト (blocking constructs) として使用されます。

Atomics.wait()
配列の指定位置に指定した値が含まれているか検証し、スリープで待機するかタイムアウトします。"ok", "not-equal", "timed-out" のいずれかの文字列を返します。呼び出したエージェントで待機が許可されていない場合、Error 例外を投げます (ほとんどのブラウザは、ブラウザのメインスレッドで wait() を許可しません。)。
Atomics.wake()
配列の指定位置の wait キューでスリープ中のエージェントを起動します。起動したエージェントの数を返します。
Atomics.isLockFree(size)
ロック機構とアトミック演算のどちらを使用するかを決定するための最適化プリミティブです。指定した要素サイズの配列上のアトミック演算がハードウェアによるアトミック演算を使用するよう実装されている場合、true を返します (それに対してロックの場合は false を返します)。専門家だけが使用してください。

仕様

仕様書 策定状況 コメント
ECMAScript Shared Memory and Atomics
Atomics の定義
ドラフト Initial definition.

ブラウザ実装状況

機能 Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
基本サポート 未サポート [2] 未サポート 46 (46) [1] [3] 未サポート 未サポート 未サポート
機能 Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
基本サポート 未サポート 未サポート 46.0 (46) [1] 未サポート 未サポート 未サポート

[1] この機能は設定で無効化されています。about:config のページで javascript.options.shared_memorytrue に設定してください。

[2] この実装は開発中であり、次のラインタイムフラグが必要です: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

互換性ノート

[3] Shared memory 仕様はまだ調整中です。SpiderMonkey 48 (Firefox 48 / Thunderbird 48 / SeaMonkey 2.45) より前のバージョンでは、最新の API 名とセマンティクスがまだ実装されていませんでした。Firefox バージョン 46 とバージョン 48 の間の変更点は次のとおりです:

  • Atomics.futexWakeOrRequeue() および Atomics.fence() メソッドは完全に削除されました (バグ 1259544バグ 1225028)。
  • Atomics.wait() および Atomics.wake() の以前のメソッド名は Atomics.futexWait()Atomics.futexWake() (バグ 1260910) でした。注記: 古いメソッド名はバージョン 49 以降で削除されます (バグ 1262062)。
  • Atomics.OK, Atomics.TIMEDOUT, Atomics.NOTEQUAL プロパティは削除されました。Atomics.wait() メソッドが文字列の "ok", "timed-out" and "not-equal" を返します (バグ 1260835)。
  • Atomics.wake() メソッドの count 引数が変更されました: デフォルト値が 0 ではなく、+Infinity になります (バグ 1253350)。

関連項目

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

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