From: Alexander Terekhov (terekhov_at_[hidden])
Date: 2006-09-20 06:18:00
Anthony Williams wrote:
> Alexander Terekhov <terekhov_at_[hidden]> writes:
> > Anthony Williams wrote:
> > [...]
> >> If A always takes the slow path when we have another waiter, then we give
> >> the OS more scope for ensuring that both A and B get a fair stab.
> > That depends on the definition of "fair". Suppose you're running on
> > uniprocessor and that A is a higher priority thread than B... why
> > should it yield to B? Under POSIX rules (which define priority
> > scheduling for scheduling allocation domains of size 1, aka
> > "uniprocessor" domains), it shall not. With your handoff logic, A
> > will yield to B.
> Not necessarily. Both A and B will wait for the semaphore. If A is higher
Suppose that B is already waiting on the semaphore. If that is not the
case, you'll get the same "starvation" scenario as with more efficient
lock but with added overhead of self consuming semaphore signal.
> What if B is higher priority than A?
Then A will yield to B (waiting for the semaphore) on unlock/slow-path
(efficient lock) and B will grab the lock (freed by A prior to