Das Atomics Objekt unterstützt atomare Operationen als statische Methoden. Diese werden mit SharedArrayBuffer Objekte benutzt.

Die atomaren Operationen sind auf dem Atomics Modul installiert. Anders, wie bei anderen globalen Objekten, ist, dass Atomics kein Konstruktor ist. Man kann Atomics nicht mit einem new Operator oder als Funktion verwenden. Alle Eigenschaften und Methoden von Atomics sind statisch (genauso wie zum Beispiel bei dem Math Objekt).

Eigenschaften

Atomics[Symbol.toStringTag]
Der Wert dieser Eigenschaft ist: "Atomics".

Methoden

Atomare Operationen

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.

Atomics.add()
Addiert einen gegebenen Wert an einer gegebenen Position im Array hinzu. Gibt den alten Wert an der Position zurück.
Atomics.and()
Berechnet ein Bitweises UND an einer gegebenen Position im Array. Gibt den alten Wert an der Position zurück.
Atomics.compareExchange()
Speichert einen gegebenen Wert an einer gegebenen Position im Array, wenn dieser gleich einem gegebene Wert ist. Gibt den alten Wert zurück.
Atomics.exchange()
Speichert einen gegebenen Wert an einer gegebenen Position im Array. Gibt den alten Wert zurück.
Atomics.load()
Gibt den Wert an einer gegebenen Position im Array zurück.
Atomics.or()
Berechnet ein Bitweises ODER an einer gegebenen Position im Array. Gibt den alten Wert an der Position zurück.
Atomics.store()
Speichert einen gegebenen Wert an einer gegebenen Position im Array. Gibt den Wert zurück.
Atomics.sub()
Subtrahiert einen gegebenen Wert an einer gegebenen Position im Array hinzu. Gibt den alten Wert an der Position zurück.
Atomics.xor()
Berechnet ein Bitweises XOR an einer gegebenen Position im Array. Gibt den alten Wert an der Position zurück.

Wait und wake

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

Atomics.wait()
Überprüft, ob an einer gegebenen Position in einem Array noch einen gegebenen Wert enthalten ist und wartet oder bekommt ein Timeout. Es wird "ok", "not-equal", oder "timed-out" zurückgegeben. Wenn warten im ausführenden Agent nicht erlaubt ist, wird ein Fehler geworfen (die meisten Browser erlauben kein wait() im Browser main Thread).
Atomics.wake()
Weckt einen Agenten auf der in der Warteschlange an der gegebenen Arrayposition schläft. Gibt die Zahl der aufgewachten Agenten zurück.
Atomics.isLockFree(size)

Eine primitive Optimierung, die feststellten kann, ob Locks und atomare Operationen benutzt werden können. Gibt true 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.

Spezifikationen

Spezifikation Status Kommentar
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Atomics' in dieser Spezifikation.
Entwurf Initiale Definition in ES2017.
ECMAScript 2017 (ECMA-262)
Die Definition von 'Atomics' in dieser Spezifikation.
Standard  

Browserkompatibilität

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Grundlegende Unterstützung601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
add601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
and601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
compareExchange601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
exchange601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
isLockFree601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
load601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
or601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
store601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
sub601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
wait601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
wake601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
xor601 Nein2

573 4

55 — 57

46 — 555

Nein Nein10.1 —?
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Grundlegende Unterstützung601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
add601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
and601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
compareExchange601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
exchange601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
isLockFree601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
load601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
or601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
store601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
sub601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
wait601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
wake601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein
xor601601 ?

573 4

55 — 57

46 — 555

Nein Nein Nein

1. Chrome disabled SharedArrayBuffer on January 5, 2018 to help reduce the efficacy of speculative side-channel attacks. This is intended as a temporary measure until other mitigations are in place.

2. Support was removed to mitigate speculative execution side-channel attacks (Windows blog).

3. Support was disabled by default to mitigate speculative execution side-channel attacks (Mozilla Security Blog).

4. From version 57: this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.

5. From version 46 until version 55 (exclusive): this feature is behind the javascript.options.shared_memory preference (needs to be set to true). To change preferences in Firefox, visit about:config.

Kompatibilitätshinweise

Vor Firefox 48 waren die neuesten API-Namen und Semantiken noch nicht implementiert. Die Unterschiede zwischen der Firefox Version 46 und der Version 48 sind:

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

 Mitwirkende an dieser Seite: schlagi123
 Zuletzt aktualisiert von: schlagi123,