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 Ordering | Sequentially consistent | ไม่มีการรับประกัน |
กรณีพิเศษและข้อผิดพลาด
- โยน
RangeErrorหากindexอยู่นอกขอบเขต - โยน
TypeErrorหากtypedArrayไม่ใช่ typed array ที่รองรับ - ต้องใช้ในบริบทที่รองรับ
SharedArrayBuffer(ต้องตั้งค่า COOP/COEP headers)