Limited availability
Die statische Methode Atomics.waitAsync()
überprüft, ob sich an einem freigegebenen Speicherort ein bestimmter Wert befindet. Sie gibt sofort ein Objekt mit der Eigenschaft value
zurück, das den String "not-equal"
enthält, wenn der Speicherort nicht mit dem angegebenen Wert übereinstimmt, oder "timed-out"
, wenn das Timeout auf null gesetzt wurde. Andernfalls gibt die Methode ein Objekt zurück, bei dem die Eigenschaft value
ein Promise
ist, das mit entweder "ok"
erfüllt wird, wenn Atomics.notify()
aufgerufen wird, oder "timed-out"
, wenn das Timeout abläuft.
Atomics.waitAsync()
und Atomics.notify()
werden zusammen verwendet, um Threads auf Grundlage eines Werts im freigegebenen Speicher zu synchronisieren. Ein Thread kann sofort fortfahren, wenn sich der Synchronisationswert geändert hat, oder auf eine Benachrichtigung eines anderen Threads warten, wenn er den Synchronisationspunkt erreicht.
Diese Methode funktioniert nur mit einem Int32Array
oder BigInt64Array
, das einen SharedArrayBuffer
ansieht. Sie ist nicht blockierend und kann, anders als Atomics.wait()
, im Hauptthread verwendet werden. Da sie den gesamten Thread nicht blockiert, müssen Sie dennoch darauf achten, nicht auf den freigegebenen Speicher zuzugreifen, bevor das Promise abgeschlossen ist.
Atomics.waitAsync(typedArray, index, value)
Atomics.waitAsync(typedArray, index, value, timeout)
Parameter
typedArray
Ein Int32Array
oder BigInt64Array
, das einen SharedArrayBuffer
ansieht.
index
Die Position im typedArray
, auf die gewartet wird.
value
Der erwartete Wert, der getestet wird.
timeout
Optional
Zeit, die in Millisekunden gewartet wird. NaN
(und Werte, die in NaN
umgewandelt werden, wie undefined
) werden zu Infinity
. Negative Werte werden zu 0
.
Ein Object
mit den folgenden Eigenschaften:
async
Ein boolescher Wert, der angibt, ob die Eigenschaft value
ein Promise
ist oder nicht.
value
Wenn async
false
ist, wird es ein String sein, entweder "not-equal"
oder "timed-out"
(nur wenn der timeout
-Parameter 0
ist). Wenn async
true
ist, wird es ein Promise
sein, das mit einem String-Wert erfüllt wird, entweder "ok"
oder "timed-out"
. Das Promise wird niemals abgelehnt.
TypeError
Wird ausgelöst, wenn typedArray
kein Int32Array
oder BigInt64Array
ist, das einen SharedArrayBuffer
ansieht.
RangeError
Wird ausgelöst, wenn index
auÃerhalb der Grenzen im typedArray
liegt.
Gegeben ein freigegebenes Int32Array
.
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet auf die Position 0, die 0 sein soll. result.value
wird ein Promise sein.
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"
aufgelöst werden.
Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }
Wenn es nicht mit "ok"
aufgelöst wird, war der Wert im freigegebenen Speicherort nicht der erwartete (der value
wäre "not-equal"
anstelle eines Promises) oder das Timeout wurde erreicht (das Promise wird zu "time-out"
aufgelöst).
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4