Atomics.wait()

Baseline Widely available

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

Die statische Methode Atomics.wait() überprüft, ob eine Position im gemeinsam genutzten Speicher einen bestimmten Wert enthält und schläft, falls dies zutrifft, um auf eine Weckbenachrichtigung oder ein Timeout zu warten. Sie gibt einen String zurück, der "not-equal" ist, wenn die Speicherstelle nicht mit dem angegebenen Wert übereinstimmt, "ok", wenn sie durch Atomics.notify() geweckt wird, oder "timed-out", wenn das Timeout abläuft.

Atomics.wait() und Atomics.notify() werden zusammen verwendet, um die Thread-Synchronisation basierend auf einem Wert im gemeinsam genutzten Speicher zu ermöglichen. Ein Thread kann sofort fortfahren, wenn sich der Synchronisationswert geändert hat, oder er kann auf eine Benachrichtigung eines anderen Threads warten, wenn er den Synchronisationspunkt erreicht.

Diese Methode funktioniert nur mit einem Int32Array oder BigInt64Array, das einen SharedArrayBuffer betrachtet. Sie ist blockierend und kann nicht im Hauptthread verwendet werden. Für eine nicht blockierende, asynchrone Version dieser Methode siehe Atomics.waitAsync().

Syntax

js
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)

Parameter

typedArray

Ein Int32Array oder BigInt64Array, das einen SharedArrayBuffer betrachtet.

index

Die Position im typedArray, auf die gewartet wird.

value

Der erwartete Wert, der überprüft werden soll.

timeout Optional

Die Wartezeit in Millisekunden. NaN (und Werte, die in NaN umgewandelt werden, wie z.B. undefined) wird zu Infinity. Negative Werte werden zu 0.

Rückgabewert

Ein String, der entweder "not-equal", "ok" oder "timed-out" ist.

  • "not-equal" wird sofort zurückgegeben, wenn der anfängliche value nicht dem entspricht, was an index gespeichert ist.
  • "ok" wird zurückgegeben, wenn durch einen Aufruf von Atomics.notify() geweckt wird, unabhängig davon, ob sich der erwartete Wert geändert hat.
  • "timed-out" wird zurückgegeben, wenn eine schlafende Wartezeit das angegebene timeout überschreitet, ohne durch Atomics.notify() geweckt zu werden.

Ausnahmen

TypeError

Wird in einem der folgenden Fälle ausgelöst:

RangeError

Wird ausgelöst, wenn index im typedArray außerhalb des gültigen Bereichs liegt.

Beispiele

Verwendung von wait()

Angenommen, es gibt ein gemeinsames Int32Array:

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

Ein lesender Thread schläft und wartet auf Position 0, weil der bereitgestellte value mit dem übereinstimmt, was an der bereitgestellten index-Position gespeichert ist. Der lesende Thread wird nicht fortfahren, bis der schreibende Thread Atomics.notify() auf Position 0 des bereitgestellten typedArray aufgerufen hat. Beachten Sie, dass der lesende Thread nicht wieder schlafen geht, wenn nach dem Aufwachen der Wert an Position 0 vom schreibenden Thread nicht geändert wurde, sondern weiter 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, nachdem 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.wait

Browser-Kompatibilität

Siehe auch