aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/atomics/notify/index.html
blob: 9595b04f3df47318b9b393c7dea5585e33714096 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
---
title: Atomics.wake()
slug: Web/JavaScript/Reference/Global_Objects/Atomics/notify
translation_of: Web/JavaScript/Reference/Global_Objects/Atomics/notify
original_slug: Web/JavaScript/Reference/Global_Objects/Atomics/wake
---
<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>