Atomics
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, als 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 den angegebenen Wert dem existierenden Wert an der gegebenen Position im Array hinzu. Gibt den alten Wert an der Position zurück.
Atomics.and()
- 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.
Atomics.compareExchange()
- Speichert einen angegebenen Wert an der angegebenen Position im Array, wenn dieser gleich einem angegebene Wert ist. Gibt den alten Wert zurück.
Atomics.exchange()
- Speichert einen angegebenen Wert an einer angegebenen Position im Array. Gibt den alten Wert zurück.
Atomics.load()
- Gibt den Wert an einer angegebenen Position im Array zurück.
Atomics.or()
- 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.
Atomics.store()
- Speichert einen angegebenen Wert an einer angegebenen Position im Array. Gibt den Wert zurück.
Atomics.sub()
- Subtrahiert einen angegebenen Wert von einem Wert an einer angegebenen Position im Array. Gibt den alten Wert an der Position zurück.
Atomics.xor()
- 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.
Wait und notify
Die wait()
und notify()
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 der angegebenen Position in einem Array einen angegebener Wert enthalten ist und wartet oder bekommt ein Timeout. Es wird
"ok"
,"not-equal"
, oder"timed-out"
zurückgegeben. Wenn Warten im ausführenden Agenten nicht erlaubt ist, wird ein Fehler geworfen (die meisten Browser erlauben keinwait()
im Browser main Thread). Atomics.notify()
- Benachrichtigt Agenten, die auf die angegebene Arrayposition warten. Gibt die Zahl der benachrichtigten 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 (ECMA-262) Die Definition von 'Atomics' in dieser Spezifikation. |
Lebender Standard | Initiale Definition in ES2017. |
ECMAScript 2017 (ECMA-262) Die Definition von 'Atomics' in dieser Spezifikation. |
Standard |
Browserkompatibilität
BCD tables only load in the browser
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:
- Die Methoden
Atomics.futexWakeOrRequeue()
undAtomics.fence()
sind vollständig entfernt (Bug 1259544 und Bug 1225028). - Die Methoden
Atomics.wait()
andAtomics.wake()
hießenAtomics.futexWait()
undAtomics.futexWake()
(Bug 1260910). Hinweis: Die alten Namen wurden in den Version 49 und später entfernt (Bug 1262062). - Die Eigenschaften
Atomics.OK
,Atomics.TIMEDOUT
,Atomics.NOTEQUAL
wurden entfernt. die MethodeAtomics.wait()
gibt jetzt die Strings"ok"
,"timed-out"
und"not-equal"
zurück (Bug 1260835). - Der
count
Parameter derAtomics.wake()
Methode wurde geändert: Der Standardwert ist+Infinity
und nicht0
(Bug 1253350).
Siehe auch
ArrayBuffer
- JavaScript getypte Arrays
- Web Workers
- parlib-simple – Eine einfache Bibliothek, die Synchronisation und verteilte Abstraktionen ermöglicht.
- Geteilter Speicher (Shared Memory) – ein kurzes Tutorial
- A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks