Đối tượng Atomics trong JavaScript cung cấp các thao tác nguyên tử (atomic operations) như add, sub, and, or, xor, load, store dưới dạng các phương thức tĩnh. Các phương thức này được sử dụng với đối tượng SharedArrayBuffer để thực hiện các thao tác đồng bộ hóa an toàn giữa các luồng (threads).
Phương thức Atomics.sub() trừ một giá trị cho trước khỏi phần tử tại vị trí chỉ định trong mảng, và trả về giá trị cũ tại vị trí đó trước khi thực hiện phép trừ.
Cú pháp
Atomics.sub(typedArray, index, value)
typedArray: Một mảng kiểu (Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array)index: Vị trí trong mảngvalue: Giá trị cần trừ
Ví dụ cơ bản
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 30;
const oldValue = Atomics.sub(data, 0, 10);
console.log(oldValue); // 30 (giá trị cũ)
console.log(Atomics.load(data, 0)); // 20 (giá trị mới)
Ví dụ nhiều lần trừ
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 30;
console.log("Trước:", Atomics.sub(data, 0, 10)); // 30
console.log("Sau:", Atomics.load(data, 0)); // 20
console.log("Trước:", Atomics.sub(data, 0, 5)); // 20
console.log("Sau:", Atomics.load(data, 0)); // 15
Lưu ý quan trọng
- Thao tác là nguyên tử - không thể bị ngắt quãng bởi các luồng khác
- Chỉ hoạt động với
SharedArrayBuffer, không phảiArrayBufferthông thường - Trả về giá trị trước khi cập nhật, không phải giá trị mới
- Hữu ích cho việc triển khai bộ đếm, khóa (locks), và các cấu trúc dữ liệu đồng thời