Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ฟังก์ชัน Atomics.store() ใน JavaScript

Atomics.store() คืออะไร

ฟังก์ชัน Atomics.store() เป็นหนึ่งในเมธอดของวัตถุ Atomics ใช้สำหรับ เขียนค่า (store) ลงในตำแหน่งที่กำหนดของ typed array ที่แบ่งปัน (shared typed array) แบบอะตอมิก ฟังก์ชันนี้รับค่า (value) และตำแหน่ง (index) แล้วเก็บค่านั้นไว้ในตำแหน่งที่ระบุ และคืนค่า เดียวกัน (ค่าที่เพิ่งเก็บ)

ไวยากรณ์ (Syntax)

Atomics.store(typedArray, index, value)
  • typedArray - Typed array ที่แบ่งปัน (เช่น Int32Array, Uint8Array)
  • index - ตำแหน่งที่จะเก็บค่า
  • value - ค่าที่จะเก็บ

คืนค่า: ค่า value ที่เพิ่งถูกเก็บ

ตัวอย่างการใช้งาน

ตัวอย่างที่ 1: การเก็บค่าพื้นฐาน

const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 20;

const stored = Atomics.store(data, 0, 30);
console.log('ค่าที่เก็บ:', stored);           // 30
console.log('ค่าในอาร์เรย์:', Atomics.load(data, 0)); // 30

ตัวอย่างที่ 2: การเก็บค่าหลายตำแหน่ง

const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);

console.log(Atomics.store(data, 0, 10)); // 10
console.log(Atomics.store(data, 1, 20)); // 20
console.log(Atomics.store(data, 2, 30)); // 30
console.log(Atomics.store(data, 3, 40)); // 40

// ตรวจสอบค่าทั้งหมด
for (let i = 0; i < 4; i++) {
  console.log(`data[${i}] =`, Atomics.load(data, i));
}
// ผลลัพธ์: 10, 20, 30, 40

ความแตกต่างระหว่าง Atomics.store() กับการกำหนดค่าปกติ

คุณสมบัติAtomics.store()การกำหนดค่าปกติ (arr[i] = val)
Atomicity✅ รับประกัน❌ ไม่รับประกัน
คืนค่าค่าที่เก็บค่าที่กำหนด
ใช้กับ SharedArrayBuffer✅ ได้✅ ได้ (แต่ไม่ปลอดภัย)
Memory OrderingSequentially consistentไม่มีการรับประกัน

กรณีพิเศษและข้อผิดพลาด

  • โยน RangeError หาก index อยู่นอกขอบเขต
  • โยน TypeError หาก typedArray ไม่ใช่ typed array ที่รองรับ
  • ต้องใช้ในบริบทที่รองรับ SharedArrayBuffer (ต้องตั้งค่า COOP/COEP headers)