【JavaScript ECMAScript】Atomics::Atomics.exchange静的メソッドの使い方
Atomics.exchange()静的メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
Atomics.exchange()メソッドは、SharedArrayBufferによって共有されたTypedArrayオブジェクト内の特定のインデックスにある値を、指定された新しい値とアトミック(不可分)に交換するメソッドです。
Atomicsオブジェクトは、複数のWeb Workerなどの並行処理環境において、共有メモリを安全に操作するための静的メソッド群を提供します。この「アトミック」という概念は非常に重要で、ある操作が実行されている最中に他の処理から中断されることなく、完全に実行されることを保証します。これにより、複数のスレッドが同時に同じデータにアクセスしようとした場合でも、データの競合状態(レースコンディション)を防ぎ、データの整合性を確実に保つことができます。
このメソッドは、交換対象となるTypedArray、操作する要素のインデックス、そしてそのインデックスに設定する新しい値の3つの引数を取ります。メソッドが実行されると、指定されたインデックスに存在する現在の値が新しい値に置き換えられ、置き換えられる前の古い値が戻り値として返されます。
例えば、複数のワーカーが共有するカウンターの値を安全に更新したり、共有リソースへの排他的なアクセスを制御するためのロック機構を実装したりする際に、Atomics.exchange()は非常に有用です。並行処理環境においてデータの信頼性を確保するために、このメソッドは重要な役割を担っています。
構文(syntax)
1const sharedBuffer = new SharedArrayBuffer(4 * Int32Array.BYTES_PER_ELEMENT); 2const typedArray = new Int32Array(sharedBuffer); 3const index = 0; 4const valueToStore = 10; 5 6const oldValue = Atomics.exchange(typedArray, index, valueToStore);
引数(parameters)
typedArray, index, value
- typedArray: TypedArray: 操作対象の配列
- index: number: 操作する要素のインデックス
- value: number: 設定する値
戻り値(return)
number または bigint
Atomics.exchange()は、指定されたTypedArrayの指定されたインデックスにある値と、新しい値をアトミックに交換した後の、元の値を返します。