Atomics - คู่มือฉบับย่อ

Atomics

Atomics เป็นอ็อบเจ็กต์ใน JavaScript ซึ่งจัดเตรียมการดำเนินการของอะตอมที่จะดำเนินการเป็นวิธีการคง เช่นเดียวกับวิธีการของวัตถุคณิตศาสตร์วิธีการและคุณสมบัติของ Atomics ยังคงที่ Atomics ใช้กับอ็อบเจ็กต์ SharedArrayBuffer

การดำเนินการของอะตอมถูกติดตั้งบนโมดูล Atomics ซึ่งแตกต่างจากวัตถุส่วนกลางอื่น ๆ Atomics ไม่ใช่ตัวสร้าง Atomics ไม่สามารถใช้กับตัวดำเนินการใหม่หรือเรียกใช้เป็นฟังก์ชันได้

ปฏิบัติการปรมาณู

การดำเนินการของปรมาณูเป็นสิ่งที่ไม่สามารถเกิดขึ้นได้

เมื่อใช้หน่วยความจำร่วมกันเธรดหลายเธรดสามารถอ่านหรือเขียนข้อมูลที่มีอยู่ในหน่วยความจำได้ ดังนั้นหากข้อมูลใด ๆ มีการเปลี่ยนแปลงข้อมูลจะสูญหายไปการดำเนินการของปรมาณูตรวจสอบให้แน่ใจว่าค่าที่คาดการณ์ (ข้อมูล) ถูกเขียนและอ่านอย่างถูกต้อง การดำเนินการของอะตอมจะไม่เริ่มต้นจนกว่าและเว้นแต่การดำเนินการปัจจุบันจะเสร็จสิ้นดังนั้นจึงไม่มีวิธีใดที่จะเปลี่ยนแปลงข้อมูลที่มีอยู่ได้

ตัวอย่าง

ต่อไปนี้เป็นรหัสที่แสดงการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

Atomics

Atomics เป็นอ็อบเจ็กต์ใน JavaScript ซึ่งจัดเตรียมการดำเนินการของอะตอมที่จะดำเนินการเป็นวิธีการคง เช่นเดียวกับวิธีการของวัตถุคณิตศาสตร์วิธีการและคุณสมบัติของ Atomics ยังคงที่ Atomics ใช้กับอ็อบเจ็กต์ SharedArrayBuffer

การดำเนินการของอะตอมถูกติดตั้งบนโมดูล Atomics ซึ่งแตกต่างจากวัตถุส่วนกลางอื่น ๆ Atomics ไม่ใช่ตัวสร้าง Atomics ไม่สามารถใช้กับตัวดำเนินการใหม่หรือเรียกใช้เป็นฟังก์ชันได้

ปฏิบัติการปรมาณู

การดำเนินการของปรมาณูเป็นสิ่งที่ไม่สามารถเกิดขึ้นได้

เมื่อใช้หน่วยความจำร่วมกันเธรดหลายเธรดสามารถอ่านหรือเขียนข้อมูลที่มีอยู่ในหน่วยความจำได้ ดังนั้นหากข้อมูลใด ๆ มีการเปลี่ยนแปลงข้อมูลจะสูญหายไปการดำเนินการของปรมาณูตรวจสอบให้แน่ใจว่าค่าที่คาดการณ์ (ข้อมูล) ถูกเขียนและอ่านอย่างถูกต้อง การดำเนินการของอะตอมจะไม่เริ่มต้นจนกว่าและเว้นแต่การดำเนินการปัจจุบันจะเสร็จสิ้นดังนั้นจึงไม่มีวิธีใดที่จะเปลี่ยนแปลงข้อมูลที่มีอยู่ได้

ตัวอย่าง

ต่อไปนี้เป็นรหัสที่แสดงการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

addวิธีการเพิ่มค่าที่ระบุในตำแหน่งที่กำหนดในอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ทำให้แน่ใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.add(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value ที่จะเพิ่ม

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

andวิธีการคำนวณบิตและด้วยค่าที่ระบุในตำแหน่งที่กำหนดในอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.and(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value ซึ่งจะคำนวณและคำนวณในระดับบิต

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.and(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 & 2 = 110 & 010 = 010 = 2
            container.innerHTML = Atomics.and(arr, 0, 2) + '<br/>'+ Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

compareExchangeวิธีการเปรียบเทียบและแลกเปลี่ยนค่าทดแทนหากค่าที่กำหนดไม่เหมือนกับค่าเก่า จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.compareExchange(typedArray, index, expectedValue, replacementValue)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • expectedValue เพื่อตรวจสอบความเท่าเทียมกัน

  • replacementValue แลกเปลี่ยน.

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.compareExchange(arr, 0, 6, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.compareExchange(arr, 0, 6, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

exchangeวิธีการแลกเปลี่ยนค่าที่กำหนดในตำแหน่งที่กำหนดของอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.exchange(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value แลกเปลี่ยน.

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.exchange(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.exchange(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

isLockFreeวิธีการใช้เพื่อกำหนดว่าจะใช้ล็อคหรือไม่สำหรับการดำเนินการของอะตอม ถ้าขนาดที่กำหนดเป็นหนึ่งในคุณสมบัติ TypedArray.BYTES_PER_ELEMENT ของประเภท TypedArray จำนวนเต็มจะส่งคืนจริง TypedArray.BYTES_PER_ELEMENT แสดงขนาดเป็นไบต์ของแต่ละองค์ประกอบของอาร์เรย์ที่พิมพ์

ไวยากรณ์

Atomics.isLockFree(size)

พารามิเตอร์

  • size ที่จะตรวจสอบเป็นไบต์

กลับ

ส่งคืนค่าจริงหากการดำเนินการไม่มีการล็อกเป็นเท็จ

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.isLockFree(1)</p>
      <p>Atomics.isLockFree(3)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            // Int8Array.BYTES_PER_ELEMENT = 1
            container.innerHTML = Atomics.isLockFree(Int8Array.BYTES_PER_ELEMENT) + '<br/>' + Atomics.isLockFree(3);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

load วิธีการคืนค่าในตำแหน่งที่กำหนดในอาร์เรย์

ไวยากรณ์

Atomics.load(typedArray, index)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

กลับ

ส่งคืนค่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.add(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            container.innerHTML = Atomics.add(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

notifyวิธีการแจ้งตัวแทนที่รอให้ตื่นขึ้นมา วิธีการแจ้งเตือนสามารถใช้ได้เฉพาะกับ Int32Array ที่สร้างโดยใช้ SharedArrayBuffer ส่งคืน 0 ในกรณีที่ใช้อ็อบเจ็กต์ ArrayBuffer ที่ไม่แบ่งใช้

ไวยากรณ์

Atomics.notify(typedArray, index, count)

พารามิเตอร์

  • typedArray เป็น Int32Array ที่ใช้ร่วมกัน

  • index เป็นตำแหน่งในพิมพ์ดีดเพื่อปลุก

  • count คือจำนวนตัวแทนการนอนหลับที่จะแจ้งเตือน

กลับ

ส่งคืนจำนวนตัวแทนที่ตื่นขึ้นมา

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.store(arr, 0, 5)</p>
      <p>Atomics.notify(arr, 0, 1)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(16);
            var arr = new Int32Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;            
            container.innerHTML = Atomics.store(arr, 0, 5) + '<br>' + Atomics.notify(arr, 0, 1);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

orวิธีการคำนวณบิตหรือด้วยค่าที่ระบุในตำแหน่งที่กำหนดในอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ทำให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.or(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value ซึ่งจะคำนวณในระดับบิตหรือ

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.or(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 | 2 = 110 | 010 = 110 = 6
            container.innerHTML = Atomics.or(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

storeวิธีการเก็บค่าในตำแหน่งที่ระบุในอาร์เรย์และส่งคืนค่าเดียวกัน การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.store(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีดที่จะจัดเก็บค่า

  • value ที่จะจัดเก็บ

กลับ

ส่งคืนค่าที่เก็บไว้ในตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.store(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;           
            container.innerHTML = Atomics.store(arr, 0, 2) + '<br/>'
            + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

subวิธีการลบค่าที่ระบุในตำแหน่งที่กำหนดในอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.sub(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value จะถูกลบออก

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.sub(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 - 2 = 4
            container.innerHTML = Atomics.sub(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์

xorวิธีคำนวณ XOR แบบบิตด้วยค่าที่ระบุในตำแหน่งที่กำหนดในอาร์เรย์ จะคืนค่าเก่าที่ตำแหน่งนั้น การดำเนินการของอะตอมนี้ช่วยให้มั่นใจได้ว่าจะไม่มีการเขียนอื่นใดเกิดขึ้นได้จนกว่าค่าที่แก้ไขจะถูกเขียนกลับ

ไวยากรณ์

Atomics.xor(typedArray, index, value)

พารามิเตอร์

  • typedArray คืออาร์เรย์ที่พิมพ์จำนวนเต็ม

  • index เป็นตำแหน่งในพิมพ์ดีด

  • value ที่จะคำนวณ XOR ระดับบิต

กลับ

ส่งคืนค่าเก่าที่ตำแหน่งที่กำหนด

ข้อยกเว้น

  • TypeError ในกรณีที่อาร์เรย์ที่ส่งผ่านไม่ใช่อาร์เรย์ที่พิมพ์จำนวนเต็ม

  • RangeError หากดัชนีที่ส่งผ่านไม่ถูกผูกไว้ในอาร์เรย์ที่พิมพ์

ตัวอย่าง

ต่อไปนี้เป็นโค้ดสำหรับการใช้งาน JavaScript Atomics -

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Atomics Example</title>
      <style>
         .result {
            font-size: 20px;
            border: 1px solid black;
         }
      </style>
   </head>
   <body onLoad="operate();">
      <h1>JavaScript Atomics Properties</h1>
      <div class="result"></div>
      <p>Atomics.xor(arr, 0, 2)</p>
      <p>Atomics.load(arr, 0)</p>
      <script>
         function operate(){
            let container = document.querySelector(".result");
            // create a SharedArrayBuffer
            var buffer = new SharedArrayBuffer(25);
            var arr = new Uint8Array(buffer);
            // Initialise element at zeroth position of array with 6
            arr[0] = 6;
            //6 xor 2 = 110 xor 010 = 100 = 4
            container.innerHTML = Atomics.xor(arr, 0, 2) + '<br/>' + Atomics.load(arr, 0);
         }
      </script>
   </body>
</html>

เอาต์พุต

ตรวจสอบผลลัพธ์