Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Atomics

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

View in EnglishAlways switch to English

Atomics

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since Dezember 2021.

* Some parts of this feature may have varying levels of support.

DasAtomics Namensraumobjekt enthält statische Methoden zur Durchführung atomarer Operationen. Sie werden mitSharedArrayBuffer undArrayBuffer Objekten verwendet.

Beschreibung

Im Gegensatz zu den meisten globalen Objekten istAtomics kein Konstruktor. Sie können es nicht mit demnew Operator verwenden oder dasAtomics Objekt als Funktion aufrufen. Alle Eigenschaften und Methoden vonAtomics sind statisch (genau wie dasMath Objekt).

Atomare Operationen

Wenn Speicher gemeinsam genutzt wird, können 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 nächste Operation beginnt, und dass Operationen nicht unterbrochen werden.

Warten und Benachrichtigen

Diewait() undnotify() Methoden basieren auf Linux-Futexen ("fast user-space mutex") und bieten Möglichkeiten 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 inObject.prototype.toString() verwendet.

Statische Methoden

Atomics.add()

Fügt den angegebenen Wert dem bestehenden Wert am angegebenen Index des Arrays hinzu. Gibt den alten Wert an diesem Index zurück.

Atomics.and()

Führt eine bitweise UND-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurück.

Atomics.compareExchange()

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

Atomics.exchange()

Speichert einen Wert am angegebenen Index des Arrays. Gibt den alten Wert zurück.

Atomics.isLockFree()

Ein Optimierungsprimitive, das verwendet werden kann, um zu bestimmen, ob Sperren oder atomare Operationen verwendet werden sollen. Gibttrue zurück, wenn eine atomare Operation auf Arrays der angegebenen Elementgröße mit einer Hardware-Atomoperation (im Gegensatz zu einer Sperre) implementiert wird. Nur für Experten.

Atomics.load()

Gibt den Wert am angegebenen Index des Arrays zurück.

Atomics.notify()

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

Atomics.or()

Führt eine bitweise ODER-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurück.

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 ermöglicht 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 zurück.

Atomics.sub()

Subtrahiert einen Wert am angegebenen Index des Arrays. Gibt den alten Wert an diesem Index zurück.

Atomics.wait()

Überprüft, ob der angegebene Index des Arrays noch einen Wert enthält und wartet oder läuft ab. Gibt entweder"ok","not-equal" oder"timed-out" zurück. Wenn im aufrufenden Agenten das Warten nicht erlaubt ist, wird eine Ausnahme ausgelöst. (Die meisten Browser erlaubenwait() nicht im Haupt-Thread des Browsers.)

Atomics.waitAsync()

Wartet asynchron (d.h. ohne Blockierung, im Gegensatz zuAtomics.wait) auf einen gemeinsamen Speicherort und gibt ein Objekt zurück, das das Ergebnis der Operation darstellt.

Atomics.xor()

Führt eine bitweise XOR-Operation auf den Wert am angegebenen Index des Arrays mit dem angegebenen Wert durch. Gibt den alten Wert an diesem Index zurück.

Beispiele

Beachten Sie, dass diese Beispiele nicht direkt aus der Konsole oder von einer beliebigen Webseite ausgeführt werden können, daSharedArrayBuffer nicht definiert ist, es sei denn, seineSicherheitsanforderungen sind erfüllt.

Verwenden von Atomics

js
const sab = new SharedArrayBuffer(1024);const ta = new Uint8Array(sab);ta[0]; // 0ta[0] = 5; // 5Atomics.add(ta, 0, 12); // 5Atomics.load(ta, 0); // 17Atomics.and(ta, 0, 1); // 17Atomics.load(ta, 0); // 1Atomics.compareExchange(ta, 0, 5, 12); // 1Atomics.load(ta, 0); // 1Atomics.exchange(ta, 0, 12); // 1Atomics.load(ta, 0); // 12Atomics.isLockFree(1); // trueAtomics.isLockFree(2); // trueAtomics.isLockFree(3); // falseAtomics.isLockFree(4); // trueAtomics.or(ta, 0, 1); // 12Atomics.load(ta, 0); // 13Atomics.store(ta, 0, 12); // 12Atomics.sub(ta, 0, 2); // 12Atomics.load(ta, 0); // 10Atomics.xor(ta, 0, 1); // 10Atomics.load(ta, 0); // 11

Warten und Benachrichtigen

Angenommen, eine gemeinsameInt32Array:

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

Ein lesender Thread schläft 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 ThreadAtomics.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 geändert wurde, der lesende Threadnicht wieder einschläft, sondern fortfährt.

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

Specification
ECMAScript® 2026 Language Specification
# sec-atomics-object

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2026 Movatter.jp