Đối tượng Atomics cung cấp các thao tác bitwise nguyên tử cho SharedArrayBuffer. Phương thức Atomics.or() thực hiện phép OR 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.or(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ị để OR bitwise
Ví dụ 1
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 20; // 00010100
console.log(Atomics.or(data, 0, 30)); // 20 (giá trị cũ)
console.log(Atomics.load(data, 0)); // 30 (00011110 = 20 | 30)
Ví dụ 2
const buffer = new SharedArrayBuffer(16);
const data = new Uint8Array(buffer);
data[0] = 2; // 00000010
console.log(Atomics.or(data, 0, 7)); // 2 (giá trị cũ)
console.log(Atomics.load(data, 0)); // 7 (00000111 = 2 | 7)
Bảng chân trị OR
| a | b | a | b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
Ứng dụng thực tế
- Thiết lập cờ (flags) trong bitmask nguyên tử
- Bật các bit quyền hạn, trạng thái không bị race condition
- Triển khai bộ lọc Bloom (Bloom filter) đồng thời
Lưu ý
- Chỉ hoạt động với kiểu số nguyên (không hỗ trợ Float32Array, Float64Array)
- Thao tác nguyên tử - an toàn cho đa luồng
- Trả về giá trị trước khi cập nhật