Anladığım kadarıyla, bir muteksin en popüler uygulamalarının (örn. C ++ 'da std :: mutex) adaleti garanti etmediği - yani, çekişme durumlarında, kilidin iş parçacıkları tarafından sırayla alınacağını garanti etmezler. lock () olarak adlandırılır. Aslında, yüksek çekişme durumlarında, muteksi elde etmeyi bekleyen ipliklerden bazılarının asla elde edemeyeceği (umarım nadir de olsa) bile mümkündür .
Bu benim için yararsız bir davranış gibi görünüyor - bana göre adil bir muteks bir programcının istediği / beklediği şeyle daha uyumlu davranışlar üretecek.
Mutekslerin tipik olarak adil olmak için neden uygulanmadığının nedeni "performans" tır, ancak bunun ne anlama geldiğini daha iyi anlamak istiyorum - özellikle, muteksin adalet gereksinimini rahatlatmak performansı nasıl geliştirir? Bu "adil" bir muteks uygulamak için önemsiz gibi görünüyor - sadece uyku (iş parçacığını uykuya koymadan önce mutex'in bağlı listesinin kuyruğuna kilitlemek () ekleyin ve sonra unlock () aynı listenin başı ve uyan.
Burada hangi muteks-uygulama anlayışı eksik, bu daha iyi performans için adaletten fedakarlık etmenin neden değerli olduğunu açıklar?