11 Aug
2008
11 Aug
'08
7:57 p.m.
I wrote:
Zeljko Vrba:
Even worse:
A: push; unlock; gets preempted B: wait_and_pop: succeeds, making the queue empty; unlocks the mutex A: gets scheduled again, notifies the condvar which has no waiters C: wait_and_pop: acquires mutex, sleeps on the condvar
No. C doesn't sleep because the wait is guarded by the predicate the_queue.empty().
Oops. The queue is empty. So C does sleep, awaiting a push. Why is this a problem?