Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Phương thức Atomics.add() trong JavaScript

Đối tượng Atomics cung cấp các thao tác số học và bitwise nguyên tử cho SharedArrayBuffer. Phương thức Atomics.add() cộng một giá trị vào phần tử tại vị trí chỉ định và trả về giá trị cũ tại vị trí đó.

Cú pháp

Atomics.add(typedArray, index, value)
  • typedArray: Mảng kiểu số nguyên (Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array)
  • index: Vị trí trong mảng
  • value: Giá trị cần cộng

Ví dụ cơ bản

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

console.log(Atomics.add(data, 0, 3)); // 3 (giá trị cũ)
console.log(Atomics.load(data, 0));   // 6 (giá trị mới: 3 + 3)

Ứng dụng: Bộ đếm nguyên tử (Atomic Counter)

const buffer = new SharedArrayBuffer(4);
const counter = new Int32Array(buffer);

// Luồng 1
function increment() {
  const old = Atomics.add(counter, 0, 1);
  console.log(`Tăng từ ${old} thành ${old + 1}`);
}

// Luồng 2 có thể gọi increment() đồng thời an toàn

Đặc điểm quan trọng

  • Nguyên tử: Cộng và ghi lại là một thao tác không thể chia cắt
  • Trả về giá trị trước khi cộng (khác với hành vi thông thường)
  • Hỗ trợ tràn số (overflow) theo quy tắc bù 2 của kiểu dữ liệu
  • Cơ sở để xây dựng: semaphore, mutex, reference counting

Lưu ý

  • Chỉ hoạt động với SharedArrayBuffer
  • Không hỗ trợ Float32Array, Float64Array
  • Kết hợp với Atomics.load() để đọc giá trị hiện tại an toàn