--- title: SharedArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer tags: - Constructor - JavaScript - Shared Memory - SharedArrayBuffer - TypesdArrays translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer ---
SharedArrayBuffer
オブジェクトは、ジェネリックで固定長の生バイナリデータバッファーを表すために使用されます。{{jsxref("ArrayBuffer")}} オブジェクトと似ていますが、これらは共有メモリー上にビューを生成するために使用されます。ArrayBuffer
と異なり、SharedArrayBuffer
は分離できません。
SharedArrayBuffer
はすべての主要なブラウザーで 2018 年 1 月 5 日に、Spectre への対応として無効化されましたので注意してください。Chrome では、Spectre 型脆弱性から保護するためのサイト分離機能が有効にされたプラットフォームにおいて、v67 に再度有効化されています。
new SharedArrayBuffer(length)
length
指定したサイズの新しい SharedArrayBuffer
。コンテンツは 0 に初期化されている。
クラスター内のあるエージェントから別のエージェント (エージェントとは、ウェブページのメインプログラムまたはその web worker のひとつ) へ、{{jsxref("SharedArrayBuffer")}} オブジェクトを使用してメモリーを共有するために、postMessage
と structured cloning を使用します。
structured clone アルゴリズムは SharedArrayBuffers
と、SharedArrayBuffers
にマッピングされた TypedArrays
を受け入れます。どちらの場合も SharedArrayBuffer
オブジェクトは受信者に転送されて、受信側のエージェントで新たなプライベートの SharedArrayBuffer オブジェクトになります ({{jsxref("ArrayBuffer")}} と同じように)。しかし、2 つの SharedArrayBuffer
オブジェクトから参照される共有データブロックは同一のデータブロックであり、あるエージェントによるブロックへの副作用は、結果的に他方のエージェントからも見えます。
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab);
共有メモリーは、worker 内でもメインスレッド内でも同時に生成や更新ができます。システム(CPU や OS、ブラウザー)によっては、変更がすべてのコンテキストに通知されるまでに少々時間がかかります。同期するためには、{{jsxref("Atomics", "atomic", "", 1)}} 操作が必要です。
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。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")}}