Baseline Widely available
Die statische Methode Atomics.wait()
überprüft, ob ein Speicherort im gemeinsam genutzten Speicher einen angegebenen Wert enthält und schläft, falls dies zutrifft, während sie auf eine Weckbenachrichtigung oder einen Timeout wartet. Sie gibt einen String zurück, der "not-equal"
ist, wenn der Speicherort nicht mit dem angegebenen Wert übereinstimmt, "ok"
, wenn er von Atomics.notify()
geweckt wurde, oder "timed-out"
, wenn der Timeout abläuft.
Atomics.wait()
und Atomics.notify()
werden zusammen verwendet, um eine 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 von einem anderen Thread 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 Haupt-Thread verwendet werden. Für eine nicht blockierende, asynchrone Version dieser Methode siehe Atomics.waitAsync()
.
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 werden soll.
value
Der erwartete Wert zum Testen.
timeout
Optional
Wartezeit in Millisekunden. NaN
(und Werte, die in NaN
umgewandelt werden, wie z.B. undefined
) wird zu Infinity
. Negative Werte werden zu 0
.
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 bei index
gespeichert ist."ok"
wird zurückgegeben, wenn der Aufruf von Atomics.notify()
geweckt wird, unabhängig davon, ob sich der erwartete Wert geändert hat."timed-out"
wird zurückgegeben, wenn ein schlafender Wartevorgang den angegebenen timeout
überschreitet, ohne dass er von Atomics.notify()
geweckt wird.TypeError
Wird in einem der folgenden Fälle ausgelöst:
typedArray
kein Int32Array
oder BigInt64Array
ist, das einen SharedArrayBuffer
betrachtet.RangeError
Wird ausgelöst, wenn index
auÃerhalb der Grenzen des typedArray
liegt.
Gegeben ein gemeinsames Int32Array
:
const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);
Ein lesender Thread schläft und wartet an Position 0, weil der bereitgestellte value
mit dem übereinstimmt, was an dem bereitgestellten index
gespeichert ist. Der lesende Thread wird nicht weitermachen, bis der schreibende Thread Atomics.notify()
an Position 0 des bereitgestellten typedArray
aufgerufen hat. Beachten Sie, dass der lesende Thread nicht wieder einschlafen wird, nachdem er geweckt wurde, wenn der Wert an Position 0 nicht durch den schreibenden Thread geändert wurde, 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 Browser-Kompatibilität Siehe auch
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