From: Roland Schwarz (roland.schwarz_at_[hidden])
Date: 2005-09-15 08:50:43
Alexander Terekhov schrieb:
>Roland Schwarz wrote:
>>Altough I would very much appreciate if someone could tell me why it is
>>problem when the sequence: "wait then signal" does occur, during the
>>gate is closed.
>>It might very well be that this indeed _is_ no problem, I just can't see
>Because incoming waiter holds external mutex while waiting on gate.
This means that there can be at most only one thread beeing blocked on
the gate, correct?
But this still doesn't me get going. I am considering the following
sequence of events:
Given sem_wait(semBlockQueue) currently is waiting with nWaitersBlocked
The gate is open.
1) signal all takes place, causing
closing the gate
nWaitersBlocked = 0
nWaitersToUnblock = N
2) sem_wait is getting awake and starts procssing,
needing some time to proceed while the gate is closed
3) a new waiter arrives while the gate still is closed
he will block on the gate and not increment nWaitersBlocked yet
4) a signal arrives, while gate still is closed
Now is 0 < nWaitersToUnblock < N, correct?
But 0 == nWaitersBlocked
the signal results in a NO-OP and consequently the
waiter from 3) will never get it to see - hence it is lost ??
I am studying the pthread_cond_wait.c pseudo code taken from
What do I miss here? I see this is not going to happen if the thread
that signals, is holding the external mutex when trying to signal. But
a requirement, is it?
Thank you for your kind help.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk