เมื่อหลายเธรดใช้ข้อมูลร่วมกัน การทำงานของพวกมันสามารถ แทรกสลับ (interleave) เข้าไปกลางคันของการอัปเดตหลายขั้นตอน ทำให้เกิด race condition — บั๊กที่ผลลัพธ์ขึ้นอยู่กับจังหวะเวลาที่คาดเดาไม่ได้ การซิงโครไนซ์ (synchronization) คือชุดเครื่องมือที่บังคับให้เกิดลำดับที่ปลอดภัย
ปัญหา: race condition
count++ ดูเหมือน atomic แต่จริง ๆ เป็น read-modify-write (อ่าน-แก้-เขียน):
