SharedArrayBuffer

SharedArrayBuffer オブジェクトは、ジェネリックで固定長の生バイナリデータバッファーを表すために使用されます。ArrayBuffer オブジェクトと似ていますが、これらは共有メモリー上にビューを生成するために使用されます。ArrayBuffer と異なり、SharedArrayBuffer は分離できません。

SharedArrayBuffer はすべての主要なブラウザーで 2018 年 1 月 5 日に、Spectre への対応として無効化されましたので注意してください。Chrome では、Spectre 型脆弱性から保護するためのサイト分離機能が有効にされたプラットフォームにおいて、v67 に再度有効化されています

構文

new SharedArrayBuffer(length)

パラメーター

length
array buffer を生成するバイト単位のサイズ。

戻り値

指定したサイズの新しい SharedArrayBuffer。コンテンツは 0 に初期化されている。

説明

メモリーの割り当てと共有

クラスター内のあるエージェントから別のエージェント (エージェントとは、ウェブページのメインプログラムまたはその web worker のひとつ) へ、SharedArrayBuffer オブジェクトを使用してメモリーを共有するために、postMessage (en-US)structured cloning を使用します。

structured clone アルゴリズムは SharedArrayBuffers と、SharedArrayBuffers にマッピングされた TypedArrays を受け入れます。どちらの場合も SharedArrayBuffer オブジェクトは受信者に転送されて、受信側のエージェントで新たなプライベートの SharedArrayBuffer オブジェクトになります (ArrayBuffer と同じように)。しかし、2 つの SharedArrayBuffer オブジェクトから参照される共有データブロックは同一のデータブロックであり、あるエージェントによるブロックへの副作用は、結果的に他方のエージェントからも見えます。

var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

Atomic 操作で共有メモリを更新、同期する

共有メモリーは、worker 内でもメインスレッド内でも同時に生成や更新ができます。システム(CPU や OS、ブラウザー)によっては、変更がすべてのコンテキストに通知されるまでに少々時間がかかります。同期するためには、atomic 操作が必要です。

SharedArrayBuffer オブジェクトを受け付ける API

SharedArrayBuffer の生成には new 演算子が必要

SharedArrayBuffer コンストラクターは、new 演算子で呼び出される必要があります。new 演算子なしで関数として SharedArrayBuffer コンストラクターを呼び出すと、TypeError をスローします。

var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbidden
var sab = new SharedArrayBuffer(1024);

プロパティ

SharedArrayBuffer.length
SharedArrayBuffer コンストラクターの length プロパティの値は 1。
SharedArrayBuffer.prototype
すべての SharedArrayBuffer オブジェクトにプロパティ追加を許可する。

SharedArrayBuffer プロトタイプオブジェクト

すべての SharedArrayBuffer インスタンスは SharedArrayBuffer.prototype を継承しています。

プロパティ

{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','プロパティ')}}

メソッド

{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','メソッド')}}

仕様

仕様 状態 コメント
ECMAScript (ECMA-262)
SharedArrayBuffer の定義
現行の標準 ES2017 で初期定義。
ECMAScript 2017 (ECMA-262)
SharedArrayBuffer の定義
標準

ブラウザー実装状況

BCD tables only load in the browser

関連項目