From: Peter Dimov (pdimov_at_[hidden])
Date: 2006-12-11 09:22:31
Anthony Williams wrote:
> Unfortunately, it is susceptible to the "stolen wakeup" problem. If
> m_waitersCount is non-zero, the semaphore is incremented on line D.
> This will wake the appropriate number of waiting threads, but not
> immediately. Threads waiting on a semaphore will not be woken until
> they are next scheduled. Thus, a new thread might call wait,
> increment the waitersCount (line A) and acquire the (line B) before
> all the threads currently waiting have been woken.
You seem to be implying that ReleaseSemaphore with a count > 1 is not an
atomic operation but behaves as a series of ReleaseSemaphore with count == 1
calls? Is that correct? Or did I misunderstand something? I'd expect it to
atomically wake count threads and decrement the semaphore counter with
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk