pthread Condition Variable Internals¶
Overview¶
Condition variables allow threads to wait until a condition becomes true.
A condition variable does not store data.
It coordinates waiting.
Typical usage:
Motivation¶
Without condition variables:
Another thread may update state during the gap.
Result:
Condition variables solve this coordination problem.
Design Principle¶
Condition variables separate:
Condition:
Notification:
Condition stores truth.
Notification coordinates waiting.
Internal Structure¶
Conceptually:
Userspace implementation eventually reaches:
Wait Operation¶
Conceptually:
Important:
must appear atomic.
Why While Loop Is Required¶
Correct:
Avoid:
Reasons:
- spurious wakeup
- multiple waiters
- condition changed after wake
Producer Consumer Example¶
Consumer:
Producer:
Minimal Condition Variable Model¶
Educational model:
Roles:
| Component | Responsibility |
|---|---|
| ready | condition |
| mutex | protect shared state |
| seq | notification generation |
| futex | sleep and wake |
Condition vs Notification¶
Example:
Consumer:
Producer:
Consumer detects:
and re-checks:
This prevents missed notification.
Relationship with Futex¶
Conceptually:
Signal:
Actual implementations may use:
Common Mistakes¶
Incorrect:
Correct:
Incorrect:
Correct:
Incorrect:
Correct:
Related Labs¶
- Day61 futex wait semantics
- Day61 mini condition variable
References¶
- pthread_cond_wait()
- pthread_cond_signal()
- futex