diff options
Diffstat (limited to 'files/ja/web/javascript/reference/global_objects/atomics')
11 files changed, 1152 insertions, 0 deletions
diff --git a/files/ja/web/javascript/reference/global_objects/atomics/add/index.html b/files/ja/web/javascript/reference/global_objects/atomics/add/index.html new file mode 100644 index 0000000000..59b915e470 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/add/index.html @@ -0,0 +1,85 @@ +--- +title: Atomics.add() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/add +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/add +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.add()</code></strong> メソッドは、配列内の指定した位置の値に加算して、その場所の古い値を返します。これは不可分操作で、修正された値が書き戻されるまで、他の書き込みが起こらないことを保証します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-add.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.add(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> で <code><var>value</var></code> を加算する位置です。</dd> + <dt><code><var>value</var></code></dt> + <dd>加算する数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_add" name="Using_add">add() の使用</h3> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); + +Atomics.add(ta, 0, 12); // 古い値である 0 を返す。 +Atomics.load(ta, 0); // 12</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.add")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.sub()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/and/index.html b/files/ja/web/javascript/reference/global_objects/atomics/and/index.html new file mode 100644 index 0000000000..6a586a73f1 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/and/index.html @@ -0,0 +1,131 @@ +--- +title: Atomics.and() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/and +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/and +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.and()</code></strong> メソッドは、配列内の指定した位置の値に指定した値でビット単位の AND を計算し、その位置の古い値を返します。これは不可分操作で、修正された値が書き戻されるまで、他の書き込みが起こらないことを保証します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-and.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.and(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> でビット単位の AND を計s名する位置です。</dd> + <dt><code><var>value</var></code></dt> + <dd>ビット単位の AND を取る数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Description" name="Description">解説</h2> + +<p>ビット単位の AND 操作は、 <code>a</code> と <code>b</code> の両方が 1 であった場合のみ 1 を生成します。 AND 操作の真理値表を示します。</p> + +<table class="standard-table"> + <thead> + <tr> + <th><code>a</code></th> + <th><code>b</code></th> + <th><code>a & b</code></th> + </tr> + </thead> + <tbody> + <tr> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>0</td> + <td>1</td> + <td>0</td> + </tr> + <tr> + <td>1</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>1</td> + <td>1</td> + <td>1</td> + </tr> + </tbody> +</table> + +<p>例えば、ビット単位の AND を <code>5 & 1</code> で行うと、結果は <code>0001</code> すなわち10進数で1となります。</p> + +<pre>5 0101 +1 0001 + ---- +1 0001</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_add" name="Using_add">add() の使用</h3> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); +ta[0] = 5; + +Atomics.and(ta, 0, 1); // returns 0, the old value +Atomics.load(ta, 0); // 1 +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.and', 'Atomics.and')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.and")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.or()")}}</li> + <li>{{jsxref("Atomics.xor()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html b/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html new file mode 100644 index 0000000000..a92017c7ca --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/compareexchange/index.html @@ -0,0 +1,88 @@ +--- +title: Atomics.compareExchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/compareExchange +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.compareExchange()</code></strong> メソッドは、指定された値を配列内の指定した位置に格納し、その値を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-compareexchange.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.compareExchange(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> で <code><var>value</var></code> と交換する位置です。</dd> + <dt><code><var>expectedValue</var></code></dt> + <dd>等価性をチェックする値です。</dd> + <dt><code><var>replacementValue</var></code></dt> + <dd>交換する数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_compareExchange" name="Using_compareExchange">compareExchange() の使用</h3> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); +ta[0] = 7; + +Atomics.compareExchange(ta, 0, 7, 12); // returns 7, the old value +Atomics.load(ta, 0); // 12</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.compareexchange', 'Atomics.compareExchange')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.compareExchange")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.exchange()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html b/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html new file mode 100644 index 0000000000..e58cf973cf --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/exchange/index.html @@ -0,0 +1,85 @@ +--- +title: Atomics.exchange() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/exchange +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.exchange()</code></strong> メソッドは、指定された値を配列内の指定した位置に格納し、その値を返します。これは不可分操作で、古い値を読み取ってから新しい値を書き込むまでの間に他の物が書き込まないことを保証します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-exchange.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.exchange(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> で <code><var>value</var></code> と交換する位置です。</dd> + <dt><code><var>value</var></code></dt> + <dd>交換する数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_exchange" name="Using_exchange">exchange() の使用</h3> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); + +Atomics.exchange(ta, 0, 12); // returns 0, the old value +Atomics.load(ta, 0); // 12</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.exchange', 'Atomics.exchange')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.exchange")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.compareExchange()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/index.html b/files/ja/web/javascript/reference/global_objects/atomics/index.html new file mode 100644 index 0000000000..bc6043792f --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/index.html @@ -0,0 +1,145 @@ +--- +title: Atomics +slug: Web/JavaScript/Reference/Global_Objects/Atomics +tags: + - JavaScript + - Namespace + - Shared Memory + - Specifications + - 仕様 + - 共有メモリ + - 名前空間 +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics +--- +<div>{{JSRef}}</div> + +<p><strong><code>Atomics</code></strong> オブジェクトは、静的なメソッドとして不可分操作を提供します。これらは {{jsxref("SharedArrayBuffer")}} および {{jsxref("ArrayBuffer")}} オブジェクトで使用されます。</p> + +<h2 id="Description" name="Description">解説</h2> + +<p>不可分操作は、 <code>Atomics</code> モジュール上に装備されています。他のグローバルオブジェクトと異なり、 <code>Atomics</code> はコンストラクターではありません。 <a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> 演算子</a> を付けて使用したり、 <code>Atomics</code> オブジェクトを関数として呼び出したりすることはできません。 <code>Atomics</code> のすべてのプロパティとメソッドは静的です (例えば、{{jsxref("Math")}} オブジェクトの場合と同様です)。</p> + +<h3 id="Atomic_operations" name="Atomic_operations">不可分操作</h3> + +<p>メモリが共有されている場合、複数のスレッドがメモリー内の同じデータを読み書きできます。不可分操作では、予測される値の書き込みと読み込みを保証するため、次の演算が開始される前に現在の演算が完了し、その演算が割り込まれないようにします。</p> + +<h3 id="Wait_and_notify" name="Wait_and_notify">wait と notify</h3> + +<p><code>wait()</code> メソッドと <code>notify()</code> メソッドは、 Linux の futex ("fast user-space mutex") を原型としており、特定の条件が true になるまで待つ手段を提供します。一般的にはブロッキング構造として使用されます。</p> + +<h2 id="Static_methods" name="Static_methods">静的メソッド</h2> + +<dl> + <dt>{{jsxref("Atomics.add()")}}</dt> + <dd>配列の指定した位置にある既存の値に指定した値を追加します。その位置にあった古い値を返します。</dd> + <dt>{{jsxref("Atomics.and()")}}</dt> + <dd>配列の指定した位置の値と指定した値でビット単位の論理積 (AND) を計算します。その位置にあった古い値を返します。</dd> + <dt>{{jsxref("Atomics.compareExchange()")}}</dt> + <dd>値が等しい場合、配列の指定した位置に値を格納します。古い値を返します。</dd> + <dt>{{jsxref("Atomics.exchange()")}}</dt> + <dd>配列の指定した位置に値を格納します。古い値を返します。</dd> + <dt>{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}</dt> + <dd>ロック機構と不可分操作のどちらを使用するかを決定するための最適化プリミティブです。指定した要素サイズの配列上の不可分操作が (ロックではなく) ハードウェアによる不可分操作を使用するよう実装されている場合、 <code>true</code> を返します。上級者だけが使用してください。</dd> + <dt>{{jsxref("Atomics.load()")}}</dt> + <dd>配列の指定した位置の値を返します。</dd> + <dt>{{jsxref("Atomics.notify()")}}</dt> + <dd>配列の指定した位置で待機中のエージェントに通知します。通知を受けたエージェントの数を返します。</dd> + <dt>{{jsxref("Atomics.or()")}}</dt> + <dd>配列の指定した位置の値と指定した値でビット単位の論理和 (OR) を計算します。その位置にあった古い値を返します。</dd> + <dt>{{jsxref("Atomics.store()")}}</dt> + <dd>配列の指定した位置に指定した値を格納します。その値を返します。</dd> + <dt>{{jsxref("Atomics.sub()")}}</dt> + <dd>配列の指定した位置の値から指定した値を減算します。その位置にあった古い値を返します。</dd> + <dt>{{jsxref("Atomics.wait()")}}</dt> + <dd>配列の指定位置に指定した値が含まれているか検証し、休止して待機するかタイムアウトします。 "<code>ok</code>", "<code>not-equal</code>", "<code>timed-out</code>" のいずれかの文字列を返します。呼び出したエージェントで待機が許可されていない場合は、 Error 例外を投げます (ほとんどのブラウザーは、ブラウザーのメインスレッドで <code>wait()</code> を許可していません)。</dd> + <dt>{{jsxref("Atomics.xor()")}}</dt> + <dd>配列の指定した位置の値と指定した値でビット単位の排他的論理和 (XOR) を計算します。その位置にあった古い値を返します。</dd> +</dl> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_Atomics" name="Using_Atomics">Atomics の使用</h3> + +<pre class="brush: js notranslate">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); +ta[0] = 5; + +Atomics.add(ta, 0, 12); +Atomics.load(ta, 0); // 12 + +Atomics.and(ta, 0, 1); +Atomics.load(ta, 0); // 1 + +Atomics.compareExchange(ta, 0, 5, 12); +Atomics.load(ta, 0); // 12 + +Atomics.exchange(ta, 0, 12); +Atomics.load(ta, 0); // 12 + +Atomics.isLockFree(1); // true +Atomics.isLockFree(2); // true +Atomics.isLockFree(3); // false +Atomics.isLockFree(4); // true + +Atomics.or(ta, 0, 1); +Atomics.load(ta, 0); // 5 + +Atomics.store(ta, 0, 12); // 12 + +Atomics.sub(ta, 0, 2); +Atomics.load(ta, 0); // 3 + +Atomics.xor(ta, 0, 1); +Atomics.load(ta, 0); // 4 +</pre> + +<h3 id="Waiting_and_notifiying" name="Waiting_and_notifiying">待機と通知</h3> + +<p>共有された <code>Int32Array</code> があるとします。</p> + +<pre class="brush: js notranslate">const sab = new SharedArrayBuffer(1024); +const int32 = new Int32Array(sab); +</pre> + +<p>読み取りスレッドはスリープ状態で、 0 の位置が 0 である間は待機しています。これが true である限り、スレッドは進みません。しかし、書き込みスレッドが新しい値を格納すると、書き込みスレッドから通知され、新しい値 (123) を返します。</p> + +<pre class="brush: js notranslate">Atomics.wait(int32, 0, 0); +console.log(int32[0]); // 123</pre> + +<p>書き込みスレッドが新しい値を格納し、待機しているスレッドに書き込みが発生したことを通知します。</p> + +<pre class="brush: js notranslate">console.log(int32[0]); // 0; +Atomics.store(int32, 0, 123); +Atomics.notify(int32, 0, 1);</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">JavaScript 型付き配列</a></li> + <li><a href="/ja/docs/Web/API/Web_Workers_API">ウェブワーカー</a></li> + <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple</a> – 同期と分配の抽象化を行うシンプルなライブラリ。</li> + <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – 簡潔なチュートリアル</a></li> + <li><a href="https://dev.mozilla.jp/2016/05/a-taste-of-javascripts-new-parallel-primitives/">JavaScript の並列処理機能を味見してみる</a></li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/load/index.html b/files/ja/web/javascript/reference/global_objects/atomics/load/index.html new file mode 100644 index 0000000000..44c781c5a9 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/load/index.html @@ -0,0 +1,83 @@ +--- +title: Atomics.load() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/load +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/load +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.load()</code></strong> メソッドは、配列内の指定された位置の値を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-load.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.store(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> の中で値を読み込む位置。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にある値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_load" name="Using_load">load() の使用</h3> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); + +Atomics.add(ta, 0, 12); +Atomics.load(ta, 0); // 12</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.load', 'Atomics.load')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.load")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.store()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/or/index.html b/files/ja/web/javascript/reference/global_objects/atomics/or/index.html new file mode 100644 index 0000000000..0911fb8654 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/or/index.html @@ -0,0 +1,128 @@ +--- +title: Atomics.or() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/or +tags: + - Atomics + - JavaScript + - Method + - Shared Memory +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/or +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.or()</code></strong> メソッドは、配列内の指定した位置の値に指定した値でビット単位の OR を計算し、その位置にあった古い値を返します。これは不可分操作で、修正された値が書き戻されるまで、他の書き込みが起こらないことを保証します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-or.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Atomics.and(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>整数の型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}}, {{jsxref("BigInt64Array")}}, {{jsxref("BigUint64Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> でビット単位の OR を計算する位置です。</dd> + <dt><code><var>value</var></code></dt> + <dd>ビット単位の OR を取る数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Description" name="Description">解説</h2> + +<p>ビット単位の OR 操作は、 <code>a</code> と <code>b</code> のどちらかが 1 であった場合に 1 を生成します。 OR 操作の真理値表を示します。</p> + +<table class="standard-table"> + <thead> + <tr> + <th><code>a</code></th> + <th><code>b</code></th> + <th><code>a | b</code></th> + </tr> + </thead> + <tbody> + <tr> + <td>0</td> + <td>0</td> + <td>0</td> + </tr> + <tr> + <td>0</td> + <td>1</td> + <td>1</td> + </tr> + <tr> + <td>1</td> + <td>0</td> + <td>1</td> + </tr> + <tr> + <td>1</td> + <td>1</td> + <td>1</td> + </tr> + </tbody> +</table> + +<p>例えば、ビット単位の OR を <code>5 | 1</code> で行うと、結果は <code>0101</code> すなわち10進数で5となります。</p> + +<pre class="notranslate">5 0101 +1 0001 + ---- +5 0101 +</pre> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_or" name="Using_or">or の使用</h3> + +<pre class="brush: js notranslate">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); +ta[0] = 2; + +Atomics.or(ta, 0, 1); // returns 2, the old value +Atomics.load(ta, 0); // 3</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.or', 'Atomics.or')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.or")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.and()")}}</li> + <li>{{jsxref("Atomics.xor()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/store/index.html b/files/ja/web/javascript/reference/global_objects/atomics/store/index.html new file mode 100644 index 0000000000..574bf482aa --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/store/index.html @@ -0,0 +1,84 @@ +--- +title: Atomics.store() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/store +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/store +--- +<div>{{JSRef}}</div> + +<p>静的な <code><strong>Atomics</strong></code><strong><code>.store()</code></strong> メソッドは、指定された値を配列内の指定した位置に格納し、その値を返します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-store.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.store(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有整数型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}} の何れかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> で <code><var>value</var></code> を格納する位置。</dd> + <dt><code><var>value</var></code></dt> + <dd>格納する値。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>格納された値です。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>typedArray</var></code> が共有型付き配列型ではない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_store" name="Using_store">store() の使用</h3> + +<pre class="brush: js">var sab = new SharedArrayBuffer(1024); +var ta = new Uint8Array(sab); + +Atomics.store(ta, 0, 12); // 12</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.store', 'Atomics.store')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.store")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.load()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html b/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html new file mode 100644 index 0000000000..8905f665dc --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/sub/index.html @@ -0,0 +1,84 @@ +--- +title: Atomics.sub() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/sub +tags: + - Atomics + - JavaScript + - Method + - Shared Memory +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/sub +--- +<div>{{JSRef}}</div> + +<p>静的な <strong><code>Atomics.sub()</code></strong> メソッドは、配列内の指定した位置の値から減算して、その場所にあった古い値を返します。この atomic 操作は、修正された値が書き戻されるまで、ほかの書き込みが発生しないことを保証します。</p> + +<div>{{EmbedInteractiveExample("pages/js/atomics-sub.html")}}</div> + +<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox notranslate">Atomics.sub(<var>typedArray</var>, <var>index</var>, <var>value</var>) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>整数の型付き配列です。 {{jsxref("Int8Array")}}, {{jsxref("Uint8Array")}}, {{jsxref("Int16Array")}}, {{jsxref("Uint16Array")}}, {{jsxref("Int32Array")}}, {{jsxref("Uint32Array")}}, {{jsxref("BigInt64Array")}}, {{jsxref("BigUint64Array")}} のいずれかです。</dd> + <dt><code><var>index</var></code></dt> + <dd><code><var>typedArray</var></code> で <code><var>value</var></code> を減算する位置です。</dd> + <dt><code><var>value</var></code></dt> + <dd>減算する数値です。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>指定された位置にあった古い値です (<code><var>typedArray</var>[<var>index</var>]</code>)。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が許可された整数型の何れでもない場合、{{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合、 {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_sub" name="Using_sub">sub の使用</h3> + +<pre class="brush: js notranslate">const sab = new SharedArrayBuffer(1024); +const ta = new Uint8Array(sab); +ta[0] = 48; + +Atomics.sub(ta, 0, 12); // returns 48, the old value +Atomics.load(ta, 0); // 36 +</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.sub', 'Atomics.sub')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.sub")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.add()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html b/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html new file mode 100644 index 0000000000..730f1760f7 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/wait/index.html @@ -0,0 +1,97 @@ +--- +title: Atomics.wait() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/wait +tags: + - Atomics + - JavaScript + - Method + - Shared Memory + - メソッド + - 共有メモリ +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/wait +--- +<div>{{JSRef}}</div> + +<p><code><strong>Atomics</strong></code><strong><code>.wait()</code></strong> は静的なメソッドで、 {{jsxref("Int32Array")}} 中の指定された位置に指定された値が保存されているかどうかを検証し、検証できるまでスリープ、もしくはタイムアウトします。返値は "<code>ok</code>", "<code>not-equal</code>", "<code>timed-out</code>" のいずれかです。</p> + +<div class="note"> +<p><strong>注:</strong> この操作は共有された {{jsxref("Int32Array")}} に対してのみ可能で、またメインスレッドでは実行できません。</p> +</div> + +<h2 id="Syntax" name="Syntax">構文</h2> + +<pre class="syntaxbox">Atomics.wait(<var>typedArray</var>, <var>index</var>, <var>value</var>[, <var>timeout</var>]) +</pre> + +<h3 id="Parameters" name="Parameters">引数</h3> + +<dl> + <dt><code><var>typedArray</var></code></dt> + <dd>共有された {{jsxref("Int32Array")}}。</dd> + <dt><code><var>index</var></code></dt> + <dd>待つ対象となる <code><var>typedArray</var></code> の中の位置。</dd> + <dt><code><var>value</var></code></dt> + <dd>期待される値。</dd> + <dt><code><var>timeout</var></code> {{optional_inline}}</dt> + <dd>ミリ秒で表した待ち時間。時間が指定されなかった場合は {{jsxref("Infinity")}}。</dd> +</dl> + +<h3 id="Return_value" name="Return_value">返値</h3> + +<p>{{jsxref("String")}} で、 "<code>ok</code>", "<code>not-equal</code>", or "<code>timed-out</code>" のいずれか。</p> + +<h3 id="Exceptions" name="Exceptions">例外</h3> + +<ul> + <li><code><var>typedArray</var></code> が共有された {{jsxref("Int32Array")}} でない場合、 {{jsxref("TypeError")}} が発生します。</li> + <li><code><var>index</var></code> が <code><var>typedArray</var></code> の範囲を超えている場合は {{jsxref("RangeError")}} が発生します。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Using_wait" name="Using_wait">wait() の使用</h3> + +<p>次のような共有 <code>Int32Array</code> があったとします。</p> + +<pre class="brush: js">const sab = new SharedArrayBuffer(1024); +const int32 = new Int32Array(sab); +</pre> + +<p>読み手のスレッドはスリープし、 0 番目の値が 0 であることを期待して待ちます。これが成立している間、処理は進みません。しかし、書き手のスレッドが新しい値を格納した場合、書き手のスレッドによって通知され、新しい値 (123) が返ります。</p> + +<pre class="brush: js">Atomics.wait(int32, 0, 0); +console.log(int32[0]); // 123</pre> + +<p>書き手のスレッドは新しい値を格納し、待っているスレッドに書き込みが完了したことを知らせます。</p> + +<pre class="brush: js">console.log(int32[0]); // 0; +Atomics.store(int32, 0, 123); +Atomics.notify(int32, 0, 1);</pre> + +<h2 id="Specifications" name="Specifications">仕様書</h2> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">仕様書</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName('ESDraft', '#sec-atomics.wait', 'Atomics.wait')}}</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2> + +<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div> + +<p>{{Compat("javascript.builtins.Atomics.wait")}}</p> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.notify()")}}</li> +</ul> diff --git a/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html b/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html new file mode 100644 index 0000000000..be17a5f891 --- /dev/null +++ b/files/ja/web/javascript/reference/global_objects/atomics/wake/index.html @@ -0,0 +1,142 @@ +--- +title: Atomics.wake() +slug: Web/JavaScript/Reference/Global_Objects/Atomics/wake +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/notify +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p>静的メソッドである <code><strong>Atomics</strong></code><strong><code>.wake()</code></strong> は待ち行列中のいくつかのエージェントを起こします。</p> + +<div class="note"> +<p><strong>付記:</strong>この操作は共有された {{jsxref("Int32Array")}} に対してのみ許可されています。</p> +</div> + +<h2 id="構文">構文</h2> + +<pre class="syntaxbox">Atomics.wake(typedArray, index, count) +</pre> + +<h3 id="引数">引数</h3> + +<dl> + <dt><code>typedArray</code></dt> + <dd>共有された {{jsxref("Int32Array")}}。</dd> + <dt><code>index</code></dt> + <dd>起こす対象となる <code>typedArray</code> 中の位置。</dd> + <dt><code>count</code></dt> + <dd>起こすエージェントの数。既定値は {{jsxref("Infinity", "+Infinity")}} である。</dd> +</dl> + +<h3 id="返り値">返り値</h3> + +<p>起きたエージェントの数。</p> + +<h3 id="例外">例外</h3> + +<ul> + <li><code>typedArray</code> が共有されている {{jsxref("Int32Array")}} でない場合、{{jsxref("TypeError")}} が送出される。</li> + <li><code>index </code>が <code>typedArray</code> の範囲を超えている場合 {{jsxref("RangeError")}} が送出される。</li> +</ul> + +<h2 id="例">例</h2> + +<p>共有された <code>Int32Array</code> を用意します:</p> + +<pre class="brush: js">var sab = new SharedArrayBuffer(1024); +var int32 = new Int32Array(sab); +</pre> + +<p>読み手のスレッドは、0 番目の値が 0 であることを期待してスリープします。それが満たされている間、この場合は 0 番目の値が 0 である間は処理が進みません。しかし書き手のスレッドが新しい値 (この場合は 123)をストアした場合、読み手のスレッドは読み手のスレッドによって起こされ、新しい値 (123)を取得します。</p> + +<pre class="brush: js">Atomics.wait(int32, 0, 0); +console.log(int32[0]); // 123</pre> + +<p>書き手のスレッドは新しい値をストアし、待っているスレッドを起こします:</p> + +<pre class="brush: js">console.log(int32[0]); // 0; +Atomics.store(int32, 0, 123); +Atomics.wake(int32, 0, 1);</pre> + +<h2 id="仕様">仕様</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">仕様</th> + <th scope="col">状態</th> + <th scope="col">コメント</th> + </tr> + <tr> + <td>{{SpecName('Shared Memory', '#Atomics.wake', 'Atomics.wake')}}</td> + <td>{{Spec2('Shared Memory')}}</td> + <td>初期定義</td> + </tr> + </tbody> +</table> + +<h2 id="ブラウザ互換性">ブラウザ互換性</h2> + +<p>{{CompatibilityTable}}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Edge</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}} [2]</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoDesktop("46")}} [1] [3]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoMobile("46")}} [1]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] 設定で無効になっています。about:config で <code>javascript.options.shared_memory</code> を <code>true</code> に設定することで利用できます。</p> + +<p>[2] 現在実装中で、利用には次のオプションをつけて起動する必要があります:<code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p> + +<p>[3] バージョン 46 と 47 では <code>Atomics.futexWake()</code> という名前で利用できます。また引数 <code>count </code>の既定値は 0 となっています。列の代わりに <code>Atomics.OK、</code><code>Atomics.TIMEDOUT、</code><code>Atomics.NOTEQUAL</code> を返します</p> + +<h2 id="関連情報">関連情報</h2> + +<ul> + <li>{{jsxref("Atomics")}}</li> + <li>{{jsxref("Atomics.wait()")}}</li> +</ul> |