Dealing With Contention hard
Why must `wait()` always be called inside a `while(condition)` loop, not an `if(condition)` block?
- A It is syntax style.
- B Java requires it.
- C To save CPU.
- D To prevent Spurious Wakeups (the OS waking a thread without a signal) or the condition becoming false between wake-up and lock re-acquisition.
Answer: D. To prevent Spurious Wakeups (the OS waking a thread without a signal) or the condition becoming false between wake-up and lock re-acquisition.
Just because you woke up doesn't mean the data is ready. Another thread might have stolen it.
One system design question a day, with spaced repetition so the ones you miss come back.
Get the appRelated questions
- Why is 'Exponential Backoff' preferred over constant intervals for retries?
- What is the primary purpose of a Mutex (Mutual Exclusion) lock?
- Why does adding more threads sometimes *decrease* performance?
- In a Saga, if a Compensating Transaction (Undo) fails repeatedly due to contention, what is the last resort?
- In a database, what happens if Transaction A locks a row and Transaction B tries to modify the same row?
- A database restart causes thousands of application servers to instantly try to reconnect. This crashes the DB again. This is called: