Đối tượng Atomics cung cấp các thao tác bitwise nguyên tử. Phương thức Atomics.xor() thực hiện phép XOR bitwise (OR độc quyền) 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.xor(typedArray, index, value)
typedArray: Mảng kiểu số nguyênindex: Vị trí trong mảngvalue: Giá trị để XOR
Ví dụ cơ bản
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 30; // 00011110
const old = Atomics.xor(data, 0, 3); // 3 = 00000011
console.log(old); // 30 (giá trị cũ)
console.log(Atomics.load(data, 0)); // 29 (00011101 = 30 ^ 3)
Bảng chân trị XOR
| a | b | a ^ b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
XOR có tính chất: a ^ b ^ b = a (phép đảo ngược chính nó)
Ứng dụng thực tế
- Đảo bit (toggle flags) nguyên tử: bật/tắt cờ an toàn đa luồng
- Mã hóa đơn giản: XOR cipher (stream cipher)
- Checksum/Parity: Cập nhật parity bit nguyên tử
- Lock-free algorithms: Đánh dấu trạng thái (busy/idle) bằng cách flip bit
Ví dụ: Toggle flag an toàn
const FLAG_BUSY = 0x01; // Bit 0
function toggleBusy(flagsArray, index) {
// Đảo bit 0 nguyên tử
const old = Atomics.xor(flagsArray, index, FLAG_BUSY);
const wasBusy = (old & FLAG_BUSY) !== 0;
const nowBusy = !wasBusy;
return nowBusy;
}
Lưu ý
- Chỉ hỗ trợ kiểu số nguyên
- Thao tác nguyên tử - an toàn cho đa luồng
- Trả về giá trị trước khi cập nhật
- Tính chất tự đảo ngược làm XOR hữu ích cho toggle