$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
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
count.