Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【JavaScript ECMAScript】Atomics::Atomics.waitAsync静的メソッドの使い方

Atomics.waitAsync()静的メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

Atomics.waitAsync()メソッドは、JavaScriptの共有メモリ(SharedArrayBuffer)において、特定のメモリアドレスでの値の変更を非同期で待機するメソッドです。これは、主にWeb Workersのような並行処理環境で、複数のスレッドが共通のデータにアクセスし、互いに協調して動作する際に利用されます。

このメソッドは、同期版のAtomics.wait()とは異なり、呼び出し元のスレッド(特にWebブラウザのメインスレッド)をブロックすることなく、バックグラウンドで待機処理を行います。これにより、アプリケーションの応答性を維持したまま、効率的なリソースの同期やデータの連携が可能になります。

使用時には、Int32ArrayやBigInt64Arrayのような共有可能な型付き配列と、待機するインデックス、期待する値、そしてオプションでタイムアウト時間を指定します。Atomics.waitAsync()は、指定されたインデックスの値が期待する値と一致する場合にのみ待機状態に入り、別のスレッドがAtomics.notify()を呼び出して通知するか、タイムアウト時間が経過するまで待機を続けます。

このメソッドはPromiseを返します。Promiseは、通知を受け取った場合、タイムアウトした場合、または初期値が一致しなかった場合に応じて、解決値として特定のオブジェクト(例:{ async: true, value: "ok" })を返します。共有メモリを使った複雑な並行処理におけるスレッド間の連携を、非同期かつ安全に行うための重要な機能です。

公式リファレンス: Atomics.waitAsync()

構文(syntax)

1const sharedBuffer = new SharedArrayBuffer(1024);
2const int32Array = new Int32Array(sharedBuffer);
3
4Atomics.store(int32Array, 0, 0);
5
6Atomics.waitAsync(int32Array, 0, 0, 5000);

引数(parameters)

typedArray, index, value, timeout

  • typedArray: Int32Array または BigInt64Array: 待機操作の対象となる共有メモリ配列
  • index: number: typedArray 内での待機する位置を示すインデックス
  • value: number | bigint: typedArray[index] の値がこの値と等しい場合に待機します。
  • timeout: number: 待機する最大時間(ミリ秒)。Infinity で無制限に待機します。

戻り値(return)

Promise

Atomics.waitAsync() は、指定された位置のメモリ値が期待される値と異なる場合に、非同期で待機を開始します。このメソッドは Promise オブジェクトを返します。この Promise は、指定された条件が満たされたとき、またはタイムアウトが発生したときに解決されます。

関連コンテンツ