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 ein freigegebener Speicherort noch einen angegebenen Wert enthält und schläft, falls dies der Fall ist, und wartet auf eine Aufwachbenachrichtigung oder läuft ab. Sie gibt einen String zurück, der entweder "ok"
, "not-equal"
oder "timed-out"
ist.
Hinweis:
Diese Operation funktioniert nur mit einem Int32Array
oder BigInt64Array
, das einen SharedArrayBuffer
betrachtet, und darf möglicherweise nicht im Hauptthread erlaubt sein.
Für eine nicht-blockierende, asynchrone Version dieser Methode siehe Atomics.waitAsync()
.
Syntax
Atomics.wait(typedArray, index, value)
Atomics.wait(typedArray, index, value, timeout)
Parameter
typedArray
-
Ein
Int32Array
oderBigInt64Array
, das einenSharedArrayBuffer
betrachtet. index
-
Die Position im
typedArray
, auf die gewartet wird. value
-
Der erwartete Wert zum Testen.
timeout
Optional-
Wartezeit in Millisekunden.
NaN
(und Werte, die inNaN
konvertiert werden, wieundefined
) wird zuInfinity
. Negative Werte werden zu0
.
Rückgabewert
Ein String, der entweder "ok"
, "not-equal"
oder "timed-out"
ist.
Ausnahmen
TypeError
-
Wird in einem der folgenden Fälle ausgelöst:
- Wenn
typedArray
keinInt32Array
oderBigInt64Array
, das einenSharedArrayBuffer
betrachtet, ist. - Wenn der aktuelle Thread nicht blockiert werden kann (zum Beispiel, weil es der Hauptthread ist).
- Wenn
RangeError
-
Wird ausgelöst, wenn
index
außerhalb des Bereichs imtypedArray
ist.
Beispiele
Verwendung von wait()
Gegeben ein freigegebenes Int32Array
:
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet an Position 0, die erwartet wird, dass sie 0 ist. Solange das der Fall ist, wird er nicht fortfahren. Sobald der schreibende Thread jedoch einen neuen Wert gespeichert hat, wird er vom schreibenden Thread benachrichtigt und gibt den neuen Wert (123) zurück.
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);
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-atomics.wait |
Browser-Kompatibilität
BCD tables only load in the browser