Đối tượng Atomics cung cấp các thao tác bitwise nguyên tử. Phương thức Atomics.and() thực hiện phép AND bitwise giữa giá trị tại vị trí chỉ định và giá trị cho trước, lưu kết quả và trả về giá trị cũ.
Cú pháp
Atomics.and(typedArray, index, value)
typedArray: Mảng kiểu số nguyên (Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, BigInt64Array, BigUint64Array)index: Vị trí trong mảngvalue: Giá trị để AND bitwise
Ví dụ 1
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 3; // 00000011
console.log(Atomics.add(data, 0, 3)); // 3 (giá trị cũ - ví dụ gốc dùng add)
console.log(Atomics.load(data, 0)); // 6
Ví dụ 2 - Sử dụng and() thực tế
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 15; // 00001111
const old = Atomics.and(data, 0, 7); // 7 = 00000111
console.log("Giá trị cũ:", old); // 15
console.log("Giá trị mới:", data[0]); // 7 (15 & 7 = 7)
Bảng chân trị AND
| a | b | a & b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
Ứng dụng thực tế
- Xóa cờ (clear flags) trong bitmask nguyên tử
- Kiểm tra bit (masking) an toàn cho đa luồng
- Triển khai bộ khóa (spinlock) dựa trên bit
Lưu ý
- Chỉ hỗ trợ kiểu số nguyên
- Thao tác nguyên tử - không bị ngắt quãng
- Trả về giá trị trước khi cập nhật