| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Atomics | [Back] [Original] |
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen bersetzt, und kann Fehler enthalten. Erfahre mehr ber dieses Experiment.
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.
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).
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.
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.
Atomics[Symbol.toStringTag]Der Anfangswert der [Symbol.toStringTag] Eigenschaft ist der String "Atomics". Diese Eigenschaft wird in Object.prototype.toString() verwendet.
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.
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.
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
Angenommen, eine gemeinsame Int32Array:
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.
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:
console.log(int32[0]); // 0;
Atomics.store(int32, 0, 123);
Atomics.notify(int32, 0, 1);
| Spezifikation |
|---|
| ECMAScript 2027 LanguageSpecification # sec-atomics-object |
ArrayBufferDer Bauplan fr ein besseres Internet.
Teile dieses Inhalts sind 19982026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfgbar unter einer Creative-Commons-Lizenz.
| Web Proxy Viewer | New URL | Original Page |