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 Williams
Software Developer
Just Software Solutions Ltd

Boost list run by bdawes at, gregod at, cpdaniel at, john at