La mia comprensione è che le implementazioni più popolari di un mutex (ad es. Std :: mutex in C ++) non garantiscono l' equità - cioè, non garantiscono che in casi di contesa, il blocco verrà acquisito dai thread nell'ordine in cui chiamato lock (). In effetti, è persino possibile (anche se si spera poco comune) che in caso di contese elevate, alcuni dei thread in attesa di acquisire il mutex non lo acquisiscano mai .
Questo mi sembra un comportamento inutile - mi sembra che un discreto mutex produrrebbe un comportamento più in linea con ciò che un programmatore vorrebbe / aspettarsi.
La ragione per cui i mutex non sono generalmente implementati per essere giusti è "performance", ma mi piacerebbe capire meglio cosa significhi - in particolare, in che modo il rilassamento del requisito di equità del mutex migliora le prestazioni? Sembra che un mutox "equo" sarebbe banale da implementare - basta avere lock () aggiungere il thread chiamante alla coda dell'elenco collegato del mutex prima di mettere il thread in stop, quindi fare sbloccare () il thread successivo da il capo di quella stessa lista e svegliarlo.
Quali intuizioni sull'implementazione del mutex mi mancano qui, ciò spiegherebbe perché è stato considerato utile sacrificare l'equità per prestazioni migliori?