JavaScriptのAtomics.store()関数とは?構文と使い方を実例つきで解説
JavaScriptのAtomicsオブジェクトは、add(加算)やsub(減算)、and・or・xorといったビット演算、さらにload(読み込み)やstore(書き込み)など、さまざまなアトミック操作を静的メソッドとして提供するオブジェクトです。これらのメソッドは、SharedArrayBufferオブジェクトと組み合わせて使用されます。
Atomics.store()関数は、配列内の位置(インデックス)と数値(value)を受け取り、指定された位置にその値を格納します。そして、格納した値をそのまま戻り値として返します。
構文
構文は以下のとおりです。
Atomics.store(typedArray, index, value)
パラメータ
- typedArray … SharedArrayBufferを基に生成したInt8Array、Uint8Arrayなどの型付き配列。
- index … 値を格納する配列内の位置。
- value … 格納する数値。
使用例1:基本的な使い方
<html> <head> <title>JavaScript Example</title> </head> <body> <script type="text/javascript"> var arrayBuffer = new SharedArrayBuffer(16); var data = new Uint8Array(arrayBuffer); data[0] = 20; Atomics.store(data, 0, 30); document.write(Atomics.load(data, 0)); </script> </body> </html>
実行結果
30
解説
この例では、まず16バイトのSharedArrayBufferを生成し、それを基にUint8Arrayを作成しています。初期値としてdata[0]に20を設定した後、Atomics.store()を使って同じ位置に30を格納します。最後にAtomics.load()で値を読み出すと、更新後の「30」が表示されます。
使用例2:複数の位置に値を格納する
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new SharedArrayBuffer(16);
var data = new Uint8Array(arrayBuffer);
document.write(Atomics.store(data, 0, 10));
document.write("<br>");
document.write(Atomics.store(data, 1, 20));
document.write("<br>");
document.write(Atomics.store(data, 2, 30));
document.write("<br>");
document.write(Atomics.store(data, 3, 40));
</script>
</body>
</html>
実行結果
10 20 30 40
解説
この例では、インデックス0〜3の4か所にそれぞれ異なる値を格納しています。Atomics.store()は格納した値をそのまま返すため、各呼び出しで渡した「10」「20」「30」「40」が順に出力されます。
なお、Atomics.store()は複数スレッド間で共有されるバッファに対して安全に値を書き込むためのメソッドであり、競合状態(レースコンディション)を防ぎたい場面で特に有用です。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン