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 kein wait() 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

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() und Atomics.fence() sind vollstĂ€ndig entfernt (Bug 1259544 und Bug 1225028).
  • Die Methoden Atomics.wait() and Atomics.wake() hießen Atomics.futexWait() und Atomics.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 Methode Atomics.wait() gibt jetzt die Strings "ok", "timed-out" und "not-equal" zurĂŒck (Bug 1260835).
  • Der count Parameter der Atomics.wake() Methode wurde geĂ€ndert: Der Standardwert ist +Infinity und nicht 0 (Bug 1253350).

Siehe auch