Concurrency

A race condition occurs when two or more threads access shared data concurrently, and at least one of them modifies the data.

Alternatives include lock-free data structures, atomic operations, and higher-level abstractions like message passing.

Atomic operations are operations that are executed in a single, uninterruptible step.