Ma compréhension est que les implémentations les plus populaires d'un mutex (par exemple std :: mutex en C ++) ne garantissent pas l' équité - c'est-à-dire qu'elles ne garantissent pas qu'en cas de conflit, le verrou sera acquis par les threads dans l'ordre où ils appelé lock (). En fait, il est même possible (bien que, espérons-le, peu fréquent) qu'en cas de conflit élevé, certains des threads en attente d'acquérir le mutex ne puissent jamais l' acquérir.
Cela me semble un comportement inutile - il me semble qu'un mutex équitable produirait un comportement plus conforme à ce qu'un programmeur voudrait / attendrait.
La raison invoquée pour expliquer pourquoi les mutex ne sont généralement pas mis en œuvre pour être équitables est la «performance», mais j'aimerais mieux comprendre ce que cela signifie - en particulier, comment le relâchement de l'exigence d'équité du mutex améliore-t-il les performances? Il semble qu'un mutex «juste» serait trivial à implémenter - il suffit que lock () ajoute le thread appelant à la fin de la liste liée du mutex avant de mettre le thread en veille, puis de déverrouiller () pop le thread suivant à partir de la tête de cette même liste et le réveiller.
Quel aperçu de la mise en œuvre du mutex me manque ici, qui expliquerait pourquoi il a été jugé utile de sacrifier l'équité pour de meilleures performances?