--- title: Atomics slug: Web/JavaScript/Reference/Global_Objects/Atomics tags: - JavaScript - Shared Memory - Specifications translation_of: Web/JavaScript/Reference/Global_Objects/Atomics ---
Das Atomics
Objekt unterstützt atomare Operationen als statische Methoden. Diese werden mit {{jsxref("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 {{jsxref("Math")}} Objekt).
Atomics[Symbol.toStringTag]
"Atomics"
.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.
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.
"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 kein wait()
im Browser main Thread).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.
Spezifikation | Status | Kommentar |
---|---|---|
{{SpecName('ESDraft', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ESDraft')}} | Initiale Definition in ES2017. |
{{SpecName('ES8', '#sec-atomics-object', 'Atomics')}} | {{Spec2('ES8')}} |
{{Compat("javascript.builtins.Atomics")}}
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:
Atomics.futexWakeOrRequeue()
und Atomics.fence()
sind vollständig entfernt ({{bug(1259544)}} und {{bug(1225028)}}).Atomics.futexWait()
und Atomics.futexWake()
({{bug(1260910)}}). Hinweis: Die alten Namen wurden in den Version 49 und später entfernt ({{bug(1262062)}}).Atomics.OK
, Atomics.TIMEDOUT
, Atomics.NOTEQUAL
wurden entfernt. die Methode {{jsxref("Atomics.wait()")}} gibt jetzt die Strings "ok"
, "timed-out"
und "not-equal"
zurück ({{bug(1260835)}}).count
Parameter der {{jsxref("Atomics.wake()")}} Methode wurde geändert: Der Standardwert ist +Infinity
und nicht 0
({{bug(1253350)}}).