aboutsummaryrefslogtreecommitdiff
path: root/files/de/web/javascript/reference/global_objects/atomics/index.html
blob: e8a945060e9d765c006b69dc1821e6234ea2a6eb (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
---
title: Atomics
slug: Web/JavaScript/Reference/Global_Objects/Atomics
tags:
  - JavaScript
  - Shared Memory
  - Specifications
translation_of: Web/JavaScript/Reference/Global_Objects/Atomics
---
<div>{{JSRef}}</div>

<p>Das <strong><code>Atomics</code></strong> Objekt unterstützt atomare Operationen als statische Methoden. Diese werden mit {{jsxref("SharedArrayBuffer")}} Objekte benutzt.</p>

<p>Die atomaren Operationen sind auf dem <code>Atomics</code> Modul installiert. Anders, als bei anderen globalen Objekten, ist, dass <code>Atomics</code> kein Konstruktor ist. Man kann <code>Atomics</code> nicht mit einem <a href="/de/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> Operator</a> oder als Funktion verwenden. Alle Eigenschaften und Methoden von <code>Atomics</code> sind statisch (genauso wie zum Beispiel bei dem {{jsxref("Math")}} Objekt).</p>

<h2 id="Eigenschaften">Eigenschaften</h2>

<dl>
 <dt><code>Atomics[Symbol.toStringTag]</code></dt>
 <dd>Der Wert dieser Eigenschaft ist: <code>"Atomics"</code>.</dd>
</dl>

<h2 id="Methoden">Methoden</h2>

<h3 id="Atomare_Operationen">Atomare Operationen</h3>

<p>Wenn Speicher geteilt wird, können mehrere Threads auf dem gleichen Speicher lesen und schreiben. Atomare Operationen stellen sicher, dass Werte in einer Operation geschrieben und gelesen werden bevor mit der nächste Operation begonnen wird und dass eine Operation nicht unterbrochen wird.</p>

<dl>
 <dt>{{jsxref("Atomics.add()")}}</dt>
 <dd>Addiert den angegebenen Wert dem existierenden Wert an der gegebenen Position im Array hinzu. Gibt den alten Wert an der Position zurück.</dd>
 <dt>{{jsxref("Atomics.and()")}}</dt>
 <dd>Berechnet ein Bitweises UND mit dem Wert an der angegebenen Position im Array und dem angegebenen Wert. Gibt den alten Wert an der Position zurück.</dd>
 <dt>{{jsxref("Atomics.compareExchange()")}}</dt>
 <dd>Speichert einen angegebenen Wert an der angegebenen Position im Array, wenn dieser gleich einem angegebene Wert ist. Gibt den alten Wert zurück.</dd>
 <dt>{{jsxref("Atomics.exchange()")}}</dt>
 <dd>Speichert einen angegebenen Wert an einer angegebenen Position im Array. Gibt den alten Wert zurück.</dd>
</dl>

<dl>
 <dt>{{jsxref("Atomics.load()")}}</dt>
 <dd>Gibt den Wert an einer angegebenen Position im Array zurück.</dd>
 <dt>{{jsxref("Atomics.or()")}}</dt>
 <dd>Berechnet ein Bitweises ODER mit dem gegebenen Wert an der angegebenen Position im Array und dem angegebenen Wert. Gibt den alten Wert an der Position zurück.</dd>
 <dt>{{jsxref("Atomics.store()")}}</dt>
 <dd>Speichert einen angegebenen Wert an einer angegebenen Position im Array. Gibt den Wert zurück.</dd>
 <dt>{{jsxref("Atomics.sub()")}}</dt>
 <dd>Subtrahiert einen angegebenen Wert von einem Wert an einer angegebenen Position im Array. Gibt den alten Wert an der Position zurück.</dd>
 <dt>{{jsxref("Atomics.xor()")}}</dt>
 <dd>Berechnet ein Bitweises XOR mit dem Wert an einer angegebenen Position im Array und einem angegebenen Wert. Gibt den alten Wert an der Position zurück.</dd>
</dl>

<h3 id="Wait_und_notify">Wait und notify</h3>

<p>Die <code>wait()</code> und <code>notify()</code> Methoden sind auf Linux Futexes ("fast user-space mutex") modelliert und ermöglichen es zu warten, bis eine bestimmte Bedingung <code>true</code> wird, und wird als blockierendes Konstrukt verwendet.</p>

<dl>
 <dt>{{jsxref("Atomics.wait()")}}</dt>
 <dd>Überprüft, ob an der angegebenen Position in einem Array einen angegebener Wert enthalten ist und wartet oder bekommt ein Timeout. Es wird <code>"ok"</code>, <code>"not-equal"</code>, oder <code>"timed-out"</code> zurückgegeben. Wenn Warten im ausführenden Agenten nicht erlaubt ist, wird ein Fehler geworfen (die meisten Browser erlauben kein <code>wait()</code> im Browser main Thread).</dd>
 <dt>{{jsxref("Atomics.notify()")}}</dt>
 <dd>Benachrichtigt Agenten, die auf die angegebene Arrayposition warten. Gibt die Zahl der benachrichtigten Agenten zurück.</dd>
 <dt>{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}</dt>
 <dd>
 <p>Eine primitive Optimierung, die feststellten kann, ob Locks und atomare Operationen benutzt werden können. Gibt <code>true</code> zurück, wenn atomare Operationen auf einem Array der gegebenen Elementgröße mit einer atomaren Hardwareoperation implementiert ist (im Gegensatz zu einem Lock). Nur für Experten.</p>
 </dd>
</dl>

<h2 id="Spezifikationen">Spezifikationen</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Spezifikation</th>
   <th scope="col">Status</th>
   <th scope="col">Kommentar</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td>Initiale Definition in ES2017.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}}</td>
   <td>{{Spec2('ES8')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Browserkompatibilität">Browserkompatibilität</h2>



<p>{{Compat("javascript.builtins.Atomics")}}</p>

<h2 id="Kompatibilitätshinweise">Kompatibilitätshinweise</h2>

<p><span id="result_box" lang="de"><span>Vor Firefox 48 waren die neuesten API-Namen und Semantiken noch nicht implementiert.</span></span> Die Unterschiede zwischen der Firefox Version 46 und der Version 48 sind:</p>

<ul>
 <li>Die Methoden <code>Atomics.futexWakeOrRequeue()</code> und <code>Atomics.fence()</code> sind vollständig entfernt ({{bug(1259544)}} und {{bug(1225028)}}).</li>
 <li>Die Methoden {{jsxref("Atomics.wait()")}} and {{jsxref("Atomics.wake()")}} hießen <code>Atomics.futexWait()</code> und <code>Atomics.futexWake()</code> ({{bug(1260910)}}). Hinweis: Die alten Namen wurden in den Version 49 und später entfernt ({{bug(1262062)}}).</li>
 <li>Die Eigenschaften <code>Atomics.OK</code>, <code>Atomics.TIMEDOUT</code>, <code>Atomics.NOTEQUAL</code> wurden entfernt. die Methode {{jsxref("Atomics.wait()")}} gibt jetzt die Strings <code>"ok"</code>, <code>"timed-out"</code> und <code>"not-equal"</code> zurück ({{bug(1260835)}}).</li>
 <li>Der <code>count</code> Parameter der {{jsxref("Atomics.wake()")}} Methode wurde geändert: Der Standardwert ist <code>+Infinity</code> und nicht <code>0</code> ({{bug(1253350)}}).</li>
</ul>

<h2 id="Siehe_auch">Siehe auch</h2>

<ul>
 <li>{{jsxref("ArrayBuffer")}}</li>
 <li><a href="/de/docs/Web/JavaScript/Typed_arrays">JavaScript getypte Arrays</a></li>
 <li><a href="/de/docs/Web/API/Web_Workers_API">Web Workers</a></li>
 <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– Eine einfache Bibliothek, die Synchronisation und verteilte Abstraktionen ermöglicht.</li>
 <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Geteilter Speicher (Shared Memory) – ein kurzes Tutorial</a></li>
 <li><a href="https://hacks.mozilla.org/2016/05/a-taste-of-javascripts-new-parallel-primitives/">A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks</a></li>
</ul>