Atomics.waitAsync()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die statische Methode Atomics.waitAsync()
überprüft, ob ein gemeinsamer Speicherort einen bestimmten Wert enthält. Sie gibt sofort ein Objekt mit der Eigenschaft value
zurück, das den String "not-equal"
enthält, wenn der Speicherort nicht dem angegebenen Wert entspricht, oder "timed-out"
, wenn das Timeout auf null gesetzt war. Andernfalls gibt die Methode ein Objekt zurück, bei dem die Eigenschaft value
ein Promise
ist, das entweder dann mit "ok"
erfüllt wird, wenn Atomics.notify()
aufgerufen wird, oder mit "timed-out"
, wenn das Timeout abläuft.
Atomics.waitAsync()
und Atomics.notify()
werden zusammen verwendet, um die Synchronisierung von Threads basierend auf einem Wert im gemeinsamen 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 dieser den Synchronisationspunkt erreicht.
Diese Methode funktioniert nur mit einem Int32Array
oder BigInt64Array
, das einen SharedArrayBuffer
betrachtet. Sie ist nicht blockierend und kann im Gegensatz zu Atomics.wait()
im Hauptthread verwendet werden. Da sie den ganzen Thread nicht blockiert, müssen Sie dennoch darauf achten, nicht auf den gemeinsamen Speicher zuzugreifen, bevor das Promise erfüllt ist.
Syntax
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(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, der getestet werden soll.
timeout
Optional-
Zeit, die in Millisekunden gewartet werden soll.
NaN
(und Werte, die inNaN
umgewandelt werden, wieundefined
) wird zuInfinity
. Negative Werte werden zu0
.
Rückgabewert
Ein Object
mit den folgenden Eigenschaften:
async
-
Ein boolescher Wert, der angibt, ob die Eigenschaft
value
einPromise
ist oder nicht. value
-
Wenn
async
false
ist, wird es ein String sein, der entweder"not-equal"
oder"timed-out"
ist (nur wenn dertimeout
-Parameter0
ist). Wennasync
true
ist, wird es einPromise
sein, das mit einem String-Wert erfüllt wird, entweder"ok"
oder"timed-out"
. Das Promise wird niemals abgelehnt.
Ausnahmen
TypeError
-
Wird ausgelöst, wenn
typedArray
keinInt32Array
oderBigInt64Array
ist, das einenSharedArrayBuffer
betrachtet. RangeError
-
Wird ausgelöst, wenn
index
außerhalb des Bereichs imtypedArray
liegt.
Beispiele
Verwendung von waitAsync()
Gegeben ist ein gemeinsames Int32Array
.
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet an Position 0, wo ein Wert von 0 erwartet wird.
Der result.value
ist ein Promise.
const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }
Im lesenden Thread oder in einem anderen Thread wird der Speicherort 0 aufgerufen und das Promise kann mit "ok"
erfüllt werden.
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
Wenn es nicht mit "ok"
aufgelöst wird, war der Wert am gemeinsamen Speicherort nicht der erwartete Wert (das value
wäre "not-equal"
anstelle eines Promise) oder das Timeout wurde erreicht (das Promise wird mit "time-out"
aufgelöst).
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-atomics.waitasync |