Howard Chu writes:I just wonder - what is the problem with this convoy formation?
[...]
> > A straightforward reading of the language here says the decision happens > "when pthread_mutex_unlock() is called" and not at any later time. There > is nothing here to support your interpretation.
> >
> > I think the intention of the wording is that for deterministic policies,
> > it is clear that the waiting threads are actually worken and reevaluated
> > for scheduling. In the case of SCHED_OTHER, it means basically nothing,
> > considering the scheduling policy is arbitrary.
> >
> Clearly the point is that one of the waiting threads is waken and gets > the mutex, and it doesn't matter which thread is chosen. I.e., whatever
Note that this behavior directly leads to "convoy formation": if that
woken thread T0 does not immediately run (e.g., because there are higher
priority threads) but still already owns the mutex, then other running
threads contending for this mutex will block waiting for T0, forming a
convoy.