From: Anthony Williams (anthony_w.geo_at_[hidden])
Date: 2006-09-20 05:40:27
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
priority, the OS scheduler can ensure that A gets it. By waiting on a
semaphore, we leave this decision to the OS, which can then decide on the
appropriate definition of "fair". If A doesn't wait on the semaphore, A gets
to get the lock again just because it had it already at the start of its
timeslice. What if B is higher priority than A?
-- Anthony Williams Software Developer Just Software Solutions Ltd http://www.justsoftwaresolutions.co.uk