[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Atomics [Back]  [Original]

Atomics - JavaScript | MDN

Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.

View in English Always switch to English

Atomics

Baseline Weitgehend verfgbar *

Diese Funktion ist gut etabliert und funktioniert auf vielen Gerten und in vielen Browserversionen. Sie ist seit Dezember 2021 browserbergreifend verfgbar.

* Einige Teile dieser Funktion werden mglicherweise unterschiedlich gut untersttzt.

Das Atomics Namensraumobjekt enthlt statische Methoden zur Durchfhrung atomarer Operationen. Sie werden mit SharedArrayBuffer und ArrayBuffer Objekten verwendet.

In diesem Artikel

Beschreibung

Im Gegensatz zu den meisten globalen Objekten ist Atomics kein Konstruktor. Sie knnen es nicht mit dem new Operator verwenden oder das Atomics Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden von Atomics sind statisch (genau wie das Math Objekt).

Atomare Operationen

Wenn Speicher gemeinsam genutzt wird, knnen mehrere Threads die gleichen Daten im Speicher lesen und schreiben. Atomare Operationen stellen sicher, dass vorhersehbare Werte geschrieben und gelesen werden, dass Operationen abgeschlossen sind, bevor die nchste Operation beginnt, und dass Operationen nicht unterbrochen werden.

Warten und Benachrichtigen

Die wait() und notify() Methoden basieren auf Linux-Futexen ("fast user-space mutex") und bieten Mglichkeiten zum Warten, bis eine bestimmte Bedingung wahr wird. Sie werden typischerweise als blockierende Konstrukte verwendet.

Statische Eigenschaften

Atomics[Symbol.toStringTag]

Der Anfangswert der [Symbol.toStringTag] Eigenschaft ist der String "Atomics". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Statische Methoden

Atomics.add()

Fgt den angegebenen Wert dem bestehenden Wert am angegebenen Index des Arrays hinzu. Gibt den alten Wert an diesem Index zurck.

Atomics.and()

Fhrt eine bitweise UND-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurck.

Atomics.compareExchange()

Speichert einen Wert am angegebenen Index des Arrays, wenn er einem Wert entspricht. Gibt den alten Wert zurck.

Atomics.exchange()

Speichert einen Wert am angegebenen Index des Arrays. Gibt den alten Wert zurck.

Atomics.isLockFree()

Ein Optimierungsprimitive, das verwendet werden kann, um zu bestimmen, ob Sperren oder atomare Operationen verwendet werden sollen. Gibt true zurck, wenn eine atomare Operation auf Arrays der angegebenen Elementgre mit einer Hardware-Atomoperation (im Gegensatz zu einer Sperre) implementiert wird. Nur fr Experten.

Atomics.load()

Gibt den Wert am angegebenen Index des Arrays zurck.

Atomics.notify()

Benachrichtigt Agenten, die am angegebenen Index des Arrays warten. Gibt die Anzahl der Agenten zurck, die benachrichtigt wurden.

Atomics.or()

Fhrt eine bitweise ODER-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurck.

Atomics.pause()

Bietet ein Mikrowarte-Primitive, das der CPU signalisiert, dass der Anrufer in einer Schleife auf den Zugriff auf eine gemeinsam genutzte Ressource wartet. Dies ermglicht es dem System, die den Kern oder Thread zugewiesenen Ressourcen (wie z.B. Energie) zu reduzieren, ohne den aktuellen Thread aufzugeben.

Atomics.store()

Speichert einen Wert am angegebenen Index des Arrays. Gibt den Wert zurck.

Atomics.sub()

Subtrahiert einen Wert am angegebenen Index des Arrays. Gibt den alten Wert an diesem Index zurck.

Atomics.wait()

berprft, ob der angegebene Index des Arrays noch einen Wert enthlt und wartet oder luft ab. Gibt entweder "ok", "not-equal" oder "timed-out" zurck. Wenn im aufrufenden Agenten das Warten nicht erlaubt ist, wird eine Ausnahme ausgelst. (Die meisten Browser erlauben wait() nicht im Haupt-Thread des Browsers.)

Atomics.waitAsync()

Wartet asynchron (d.h. ohne Blockierung, im Gegensatz zu Atomics.wait) auf einen gemeinsamen Speicherort und gibt ein Objekt zurck, das das Ergebnis der Operation darstellt.

Atomics.xor()

Fhrt eine bitweise XOR-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurck.

Beispiele

Beachten Sie, dass diese Beispiele nicht direkt aus der Konsole oder von einer beliebigen Webseite ausgefhrt werden knnen, da SharedArrayBuffer nicht definiert ist, es sei denn, seine Sicherheitsanforderungen sind erfllt.

Verwenden von Atomics

js
const sab = new SharedArrayBuffer(1024);
const ta = new Uint8Array(sab);

ta[0]; // 0
ta[0] = 5; // 5

Atomics.add(ta, 0, 12); // 5
Atomics.load(ta, 0); // 17

Atomics.and(ta, 0, 1); // 17
Atomics.load(ta, 0); // 1

Atomics.compareExchange(ta, 0, 5, 12); // 1
Atomics.load(ta, 0); // 1

Atomics.exchange(ta, 0, 12); // 1
Atomics.load(ta, 0); // 12

Atomics.isLockFree(1); // true
Atomics.isLockFree(2); // true
Atomics.isLockFree(3); // false
Atomics.isLockFree(4); // true

Atomics.or(ta, 0, 1); // 12
Atomics.load(ta, 0); // 13

Atomics.store(ta, 0, 12); // 12

Atomics.sub(ta, 0, 2); // 12
Atomics.load(ta, 0); // 10

Atomics.xor(ta, 0, 1); // 10
Atomics.load(ta, 0); // 11

Warten und Benachrichtigen

Angenommen, eine gemeinsame Int32Array:

js
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

Ein lesender Thread schlft und wartet an Position 0, weil der bereitgestellte Wert dem entspricht, was am angegebenen Index gespeichert ist. Der lesende Thread wird nicht weitermachen, bis der schreibende Thread Atomics.notify() an Position 0 des bereitgestellten typisierten Arrays aufgerufen hat. Beachten Sie, dass, wenn nach dem Aufwecken der Wert von Position 0 nicht vom schreibenden Thread gendert wurde, der lesende Thread nicht wieder einschlft, sondern fortfhrt.

js
Atomics.wait(int32, 0, 0);
console.log(int32[0]); // 123

Ein schreibender Thread speichert einen neuen Wert und benachrichtigt den wartenden Thread, sobald er geschrieben hat:

js
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);

Spezifikationen

Spezifikation
ECMAScript 2027 LanguageSpecification
# sec-atomics-object

Browser-Kompatibilitt

Siehe auch


Web Proxy Viewer  |  New URL  |  Original Page