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 Atomics.wait()
statische Methode überprüft, ob eine geteilte Speicherstelle immer noch einen bestimmten Wert enthält und wartet, wenn dies zutrifft, auf eine Weckbenachrichtigung 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 ausgeführt werden.
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 werden soll. value
-
Der erwartete Wert zum Testen.
timeout
Optional-
Wartezeit in Millisekunden.
NaN
(und Werte, die inNaN
umgewandelt werden, wieundefined
) wird zuInfinity
. Negative Werte werden zu0
.
Rückgabewert
Ein String, der entweder "ok"
, "not-equal"
oder "timed-out"
ist.
"ok"
wird zurückgegeben, wenn durch einen Aufruf vonAtomics.notify()
aufgeweckt, unabhängig davon, ob sich der erwartete Wert geändert hat"not-equal"
wird sofort zurückgegeben, wenn der anfänglichevalue
nicht dem imindex
gespeicherten Wert entspricht"timed-out"
wird zurückgegeben, wenn eine schlafende Wartezeit den angegebenentimeout
überschreitet, ohne durchAtomics.notify()
aufgeweckt zu werden
Ausnahmen
TypeError
-
Wird in einem der folgenden Fälle ausgelöst:
- Wenn
typedArray
nicht einInt32Array
oderBigInt64Array
ist, das einenSharedArrayBuffer
betrachtet. - Wenn der aktuelle Thread nicht blockiert werden kann (zum Beispiel, weil es der Hauptthread ist).
- Wenn
RangeError
-
Wird ausgelöst, wenn
index
außerhalb der Grenzen destypedArray
liegt.
Beispiele
Verwendung von wait()
Angenommen, es gibt einen geteilten Int32Array
:
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet an der Position 0, weil der angegebene value
mit dem übereinstimmt, was an dem angegebenen index
gespeichert ist. Der lesende Thread wird erst fortfahren, wenn der schreibende Thread Atomics.notify()
an Position 0 des bereitgestellten typedArray
aufgerufen hat. Beachten Sie, dass wenn der Wert an Position 0 nach dem Aufwachen nicht vom schreibenden Thread geändert wurde, der lesende Thread nicht wieder einschlafen wird, sondern fortfahren wird.
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