Boost logo

Boost :

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

-- 
Anthony Williams
Software Developer
Just Software Solutions Ltd
http://www.justsoftwaresolutions.co.uk

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk