【JavaScript ECMAScript】Atomics::Atomics.wait静的メソッドの使い方
Atomics.wait()静的メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Atomics.wait()メソッドは、複数のJavaScriptエージェント(Web Workerなど)間で共有されるSharedArrayBuffer内の特定のメモリ位置を監視し、その値が期待する値と一致する場合に、現在のエージェントの実行を一時的に停止させるメソッドです。このメソッドは、共有メモリを介してデータが交換される際に、エージェント間の同期を安全に確立するために設計されています。
具体的には、SharedArrayBufferオブジェクト、監視対象のインデックス、そしてそのインデックスにあると期待される値を引数として受け取ります。もし実際の値が期待値と一致すれば、現在のエージェントは待機状態に入ります。待機中のエージェントは、別のエージェントがAtomics.notify()メソッドを呼び出して待機中のエージェントを起こすか、あるいはオプションで指定されたタイムアウト時間が経過するまで、処理を中断します。
これにより、共有データに対する誤ったアクセスや競合状態を防ぎ、エージェント間で処理の順序を厳密に制御することが可能になります。例えば、あるエージェントがデータ処理を完了するまで、別のエージェントが結果を読み取らないように待機させるといった用途で活用されます。待機が解除された際の理由(正常終了、値の不一致、タイムアウト)を示す文字列を返します。
構文(syntax)
1const sharedArrayBuffer = new SharedArrayBuffer(4); 2const intArray = new Int32Array(sharedArrayBuffer); 3Atomics.wait(intArray, 0, 0, 1000);
引数(parameters)
typedArray, index, value, timeout = Infinity
- typedArray: SharedArrayBuffer に対応した TypedArray オブジェクト。監視対象となる配列。
- index: number: typedArray の中で監視する要素のインデックス。
- value: any: 監視する要素がこの値である間、待機します。
- timeout: number = Infinity: 待機する最大時間(ミリ秒)。Infinity を指定すると無限に待機します。
戻り値(return)
string
Atomics.wait()は、指定された位置の値が期待値と一致した場合に、スレッドを待機状態にします。待機が終了すると、"ok"または"timed-out"という文字列を返します。