Mein Verständnis ist, dass die gängigsten Implementierungen eines Mutex (z. B. std :: mutex in C ++) keine Fairness garantieren - das heißt, sie garantieren nicht, dass in Streitfällen die Sperre von Threads in der Reihenfolge erworben wird, in der sie sich befinden genannt lock (). Tatsächlich ist es sogar möglich (wenn auch hoffentlich ungewöhnlich), dass einige der Threads, die darauf warten, den Mutex zu erwerben, ihn in Fällen hoher Konflikte möglicherweise nie erwerben.
Dies scheint mir ein nicht hilfreiches Verhalten zu sein - es scheint mir, dass ein fairer Mutex ein Verhalten ergeben würde, das eher dem entspricht, was ein Programmierer möchte / erwartet.
Der Grund dafür, warum Mutexe normalerweise nicht als fair implementiert werden, ist "Leistung", aber ich möchte besser verstehen, was dies bedeutet - insbesondere, wie die Lockerung der Fairness-Anforderungen des Mutex die Leistung verbessert? Es scheint, als wäre die Implementierung eines "fairen" Mutex trivial. Lassen Sie einfach lock () den aufrufenden Thread an das Ende der verknüpften Liste des Mutex anhängen, bevor Sie den Thread in den Ruhezustand versetzen, und lassen Sie Unlock () den nächsten Thread aus der Kopf der gleichen Liste und wecken Sie es auf.
Welche Erkenntnisse zur Mutex-Implementierung fehlen mir hier, um zu erklären, warum es als sinnvoll erachtet wurde, Fairness für eine bessere Leistung zu opfern?