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

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

Đối tượng Atomics cung cấp các thao tác nguyên tử để đồng bộ hóa truy cập bộ nhớ chia sẻ giữa các luồng (threads) trong JavaScript.

Phương thức Atomics.load() đọc và trả về giá trị tại vị trí chỉ định trong một mảng kiểu. Thao tác đọc này là nguyên tử, đảm bảo không đọc được giá trị "bán chín" (partially written) khi một luồng khác đang ghi.

Cú pháp

Atomics.load(typedArray, index)
  • typedArray: Mảng kiểu (Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array)
  • index: Vị trí cần đọc

Ví dụ cơ bản

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

Atomics.add(data, 0, 30); // Cộng 30 vào vị trí 0 (20 + 30 = 50)
console.log(Atomics.load(data, 0)); // 50

Ví dụ kết hợp với add()

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)

Tại sao cần Atomics.load()?

  • Đảm bảo độ nhất quán bộ nhớ (memory consistency)
  • Ngăn chặn trình biên dịch/CPU sắp xếp lại lệnh (reordering)
  • Thiết lập quan hệ happens-before giữa các luồng
  • Cần thiết khi đọc giá trị được ghi bởi Atomics.store() hoặc sửa đổi bởi Atomics.add(), sub(), v.v.

Lưu ý

Khác với truy cập mảng thông thường (data[0]), Atomics.load() cung cấp bảo đảm về thứ tự bộ nhớ (memory ordering) cần thiết cho lập trình đa luồng đúng đắn.