Race condition là lỗi mà kết quả phụ thuộc vào thời điểm khó đoán của các thao tác concurrent truy cập cùng một shared state. Trường hợp kinh điển là read-modify-write không atomic.
Cách hoạt động
counter += 1 trông có vẻ atomic nhưng thực ra là ba bước: read, add, write. Hai thread có thể xen kẽ khiến một lần cập nhật bị mất.
counter = 0
Thread A: đọc 0 ─────────── ghi 1
Thread B: đọc 0 ─ ghi 1
Kết quả: 1 (đáng ra là 2 — mất một lần tăng)
