Đối tượng Atomics cung cấp các nguyên ngữ đồng bộ hóa mức thấp cho SharedArrayBuffer. Không phải mọi kích thước kiểu dữ liệu đều được hỗ trợ phần cứng cho các thao tác nguyên tử.
Phương thức Atomics.isLockFree() kiểm tra xem một thao tác nguyên tử trên kiểu dữ liệu có kích thước nhất định có được thực hiện không khóa (lock-free) bởi phần cứng hay không. Nếu trả về false, trình thực thi sẽ phải dùng khóa (mutex) để mô phỏng tính nguyên tử.
Cú pháp
Atomics.isLockFree(size)
size: Kích thước byte của kiểu dữ liệu (1, 2, 4, 8)- Trả về:
truenếu lock-free,falsenếu cần khóa
Ví dụ
console.log(Atomics.isLockFree(1)); // true (Uint8Array, Int8Array)
console.log(Atomics.isLockFree(2)); // true (Uint16Array, Int16Array)
console.log(Atomics.isLockFree(4)); // true (Uint32Array, Int32Array, Float32Array)
console.log(Atomics.isLockFree(8)); // true (BigInt64Array, BigUint64Array, Float64Array)
console.log(Atomics.isLockFree(7)); // false (kích thước không hợp lệ)
Ý nghĩa thực tế
- true: Phần cứng hỗ trợ trực tiếp (CMPXCHG, LL/SC) - hiệu năng cao
- false: Cần khóa phần mềm - chậm hơn, có thể gây tranh chấp
- Trên hầu hết kiến trúc hiện đại (x64, ARM64), các kích thước 1, 2, 4, 8 byte đều lock-free
- Quantum: Kích thước không phải lũy thừa của 2 hoặc > 8 luôn trả về false
Khi nào nên dùng?
Khi thiết kế cấu trúc dữ liệu không khóa (lock-free) hoặc đánh giá hiệu năng, hãy kiểm tra isLockFree() để chọn kiểu dữ liệu phù hợp.