Khi nhiều thread dùng chung dữ liệu, các thao tác của chúng có thể xen kẽ (interleave) vào giữa một cập nhật nhiều bước, tạo ra một race condition — một bug mà kết quả phụ thuộc vào thời điểm khó lường. Đồng bộ hóa (synchronization) là tập hợp các công cụ ép ra thứ tự an toàn.
Vấn đề: một race condition
trông có vẻ nguyên tử (atomic) nhưng thực chất là đọc-sửa-ghi (read-modify-write):
