JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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() を使うことで、減算後の最新の値を安全に読み取れることも確認できます。

  1. 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

  2. JavaScriptの関数定義とは?基本構文と書き方を実例で解説

    JavaScriptにおける関数定義は、基本的に以下の要素で構成されます。functionキーワード:関数であることを示す予約語関数名:呼び出し時に使用する識別子引数(パラメータ):括弧内に記述する入力値波括弧 { }:実行されるJavaScriptの処理(ステートメント)を囲むブロック関数定義の2つの主な書き方JavaScriptでは、大きく分けて「関数宣言」と「関数式」という2つの方法で関数を定義できます。それぞれの特徴は次のとおりです。1. 関数宣言(function宣言)function helloWorld() { alert(HELLO WORLD); }functionキーワ