Intermediate Topic 18 of 51 Operating Systems
Race Conditions
Bugs where outcome depends on unpredictable timing.
How it works
A race condition occurs when the result of a program depends on the unpredictable timing or interleaving of threads or processes accessing shared state. A classic example is two threads incrementing a counter: each reads, adds and writes, and updates can be lost. Data races, where unsynchronized accesses include a write, are undefined behavior in many languages. Time-of-check to time-of-use bugs are another form.
Step-by-step walkthrough
- The counter holds 5.
- Thread 1 reads 5.
- Thread 2 also reads 5.
- Thread 1 writes 6.
- Thread 2 writes 6, so one increment is lost and the result is wrong.
Where it is used
Understanding races is essential for concurrent programming, operating systems, databases and security, where races lead to vulnerabilities like symlink attacks.
Common pitfall
Races are intermittent and often disappear when debugging or adding logs. Fix them by protecting shared state with locks, using atomic operations, avoiding sharing, using immutable data or message passing. Detect them with tools such as ThreadSanitizer, stress testing and careful code review. Adding sleeps hides but does not fix a race.
Where it fits in the course
Race Conditions is topic 18 of 51 in Operating Systems, rated Intermediate. It follows Pipes and Signals. The next topic is Critical Section.
Practice and explore
- Open the interactive lesson, with a mini quiz.
- Take the Operating Systems quiz.
How to study this topic
- Read the explanation above and restate the definition in your own words.
- Open the interactive lesson and answer its mini quiz.
- Read the common pitfall, then write a short example that avoids it.
- Check your understanding in the Operating Systems quiz, and revisit the topic if you miss a question.
Frequently asked questions
What is Race Conditions?
Where do people use Race Conditions?
What is the most common mistake with Race Conditions?
What should I learn before this topic?
How can I practice it?
Is Race Conditions hard to learn?
How long does it take to learn Race Conditions?
Which topics are related to Race Conditions?
What should I study after Race Conditions?
Related topics
- Pipes and Signals (Operating Systems)
- Critical Section (Operating Systems)
- Inter-Process Communication (Operating Systems)
- Mutex (Operating Systems)