JavaScriptのAtomics.sub()関数の使い方を解説
JavaScriptのAtomicsオブジェクトは、加算・減算・ビット演算などのアトミック(不可分)操作を静的メソッドとして提供する組み込みオブジェクトです。主なメソッドには add()、sub()、and()、or()、xor()、load()、store() などがあり、これらはすべて SharedArrayBuffer オブジェクトと組み合わせて使用します。
Atomics.sub() 関数は、指定された位置(インデックス)にある値から引数で渡した数値を減算し、その位置にあった元の値(減算前の値)を返します。複数スレッドが同じメモリ領域を共有する環境でも、競合状態(レースコンディション)を起こさず安全に減算処理を行えるのが特徴です。
構文
Atomics.sub(typedArray, index, value)
パラメータ
- typedArray:SharedArrayBuffer を基に作成された Int8Array、Uint8Array などの型付き配列。
- index:減算対象となる要素の位置(インデックス)。
- value:減算する数値。
戻り値
指定した位置に格納されていた古い値(減算前の値)が返されます。
サンプルコード1:基本的な使い方
次の例では、インデックス0に格納された値「30」から「10」を減算しています。
<html> <head> <title>JavaScript Example</title> </head> <body> <script type="text/javascript"> var arrayBuffer = new SharedArrayBuffer(16); var data = new Uint8Array(arrayBuffer); data[0] = 30; Atomics.sub(data, 0, 10); document.write(Atomics.load(data, 0)); </script> </body> </html>
出力結果
20
サンプルコード2:戻り値と現在値の確認
sub() は減算前の古い値を返すため、戻り値と減算後の値を比較すると挙動がよくわかります。
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var arrayBuffer = new SharedArrayBuffer(16);
var data = new Uint8Array(arrayBuffer);
data[0] = 30;
document.write("Previous: "+Atomics.sub(data, 0, 10));
document.write("<br>");
document.write("Result: "+Atomics.load(data, 0));
document.write("<br>");
document.write("Previous: "+Atomics.sub(data, 0, 5));
document.write("<br>");
document.write("Result: "+Atomics.load(data, 0));
</script>
</body>
</html>
出力結果
Previous: 30 Result: 20 Previous: 20 Result: 15
このように、最初の呼び出しでは元の値「30」が返され、値は「20」に更新されます。続く2回目の呼び出しでは古い値「20」が返され、値は「15」になります。Atomics.load() を使うことで、減算後の最新の値を安全に読み取れることも確認できます。
-
JavaScriptの「document.getElementByID is not a function」エラーの原因と解決方法
JavaScript の getElementById メソッドは、HTML の Document Object Model(DOM)から要素を選択するためのメソッドです。このメソッド名を誤って記述すると、プログラム実行時に document.getElementByID is not a function(関数ではありません)というエラーが発生します。 本記事では、このエラーの意味と発生理由を解説し、実際のコード例を通して修正方法をわかりやすく紹介します。 document.getElementByID is not a function とは何か document.getElemen
-
JavaScriptの関数定義とは?基本構文と書き方を実例で解説
JavaScriptにおける関数定義は、基本的に以下の要素で構成されます。functionキーワード:関数であることを示す予約語関数名:呼び出し時に使用する識別子引数(パラメータ):括弧内に記述する入力値波括弧 { }:実行されるJavaScriptの処理(ステートメント)を囲むブロック関数定義の2つの主な書き方JavaScriptでは、大きく分けて「関数宣言」と「関数式」という2つの方法で関数を定義できます。それぞれの特徴は次のとおりです。1. 関数宣言(function宣言)function helloWorld() { alert(HELLO WORLD); }functionキーワ