--- title: SharedArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer tags: - Constructor - JavaScript - Shared Memory - SharedArrayBuffer - TypesdArrays translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer ---
{{JSRef}}

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

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

{{EmbedInteractiveExample("pages/js/sharedarraybuffer-constructor.html")}}

構文

new SharedArrayBuffer(length)

パラメーター

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

戻り値

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

説明

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

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

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

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

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

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

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

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

SharedArrayBuffer コンストラクターは、{{jsxref("Operators/new", "new")}} 演算子で呼び出される必要があります。new 演算子なしで関数として SharedArrayBuffer コンストラクターを呼び出すと、{{jsxref("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。
{{jsxref("SharedArrayBuffer.prototype")}}
すべての SharedArrayBuffer オブジェクトにプロパティ追加を許可する。

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

すべての SharedArrayBuffer インスタンスは {{jsxref("SharedArrayBuffer.prototype")}} を継承しています。

プロパティ

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

メソッド

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

仕様

仕様 状態 コメント
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} {{Spec2('ESDraft')}} ES2017 で初期定義。
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} {{Spec2('ES8')}}

ブラウザー実装状況

{{Compat("javascript.builtins.SharedArrayBuffer")}}

関連項目