Non-Atomic Counter Race Condition
Overview
Incrementing/decrementing shared counters (count++, balance += amount) without atomic operations creates race conditions where concurrent updates lose some increments, leading to incorrect values. This affects rate limiters, inventory counters, and financial balances.
Remediation
- Go: Use
sync/atomicpackage (atomic.AddInt64()) - Java: Use
AtomicInteger/AtomicLong - JavaScript: Use a single event loop (Node.js) or worker locks
- C/C++: Use
std::atomic<int>or_Atomic int