Atomic operation ทำงานเสร็จแบบแบ่งแยกไม่ได้ — ไม่มี thread อื่นเห็นสถานะที่ทำค้างครึ่ง ๆ; memory visibility คือการที่ thread หนึ่งเขียนแล้วอีก thread เห็นหรือไม่; memory barrier บังคับลำดับเพื่อให้การเขียนเหล่านั้นมองเห็นได้ Lock ไม่ใช่เรื่องเดียวที่ต้องกังวล — memory model ก็เช่นกัน
Atomicity
Atomic op (เช่น fetch_add, compare-and-swap) ทำงานเป็นขั้นเดียวที่แบ่งแยกไม่ได้ จึงไม่มี race มาแบ่งมันได้ ฮาร์ดแวร์และภาษามี atomics ให้สำหรับตัวนับและ flag โดยไม่ต้องใช้ lock เต็มรูปแบบ
();
counter.incrementAndGet();
