Pemahaman saya adalah bahwa implementasi mutex yang paling populer (misalnya std :: mutex dalam C ++) tidak menjamin keadilan - yaitu, mereka tidak menjamin bahwa dalam kasus pertengkaran, kunci akan diperoleh oleh utas dalam urutan yang mereka inginkan. disebut kunci (). Bahkan, mungkin saja (walaupun mudah-mudahan tidak umum) bahwa dalam kasus pertengkaran tinggi, beberapa utas yang menunggu untuk memperoleh mutex mungkin tidak akan pernah mendapatkannya.
Ini kelihatannya seperti perilaku yang tidak membantu bagi saya - bagi saya tampaknya mutex yang adil akan menghasilkan perilaku yang lebih sesuai dengan apa yang diinginkan / diharapkan seorang programmer.
Alasan yang diberikan mengapa mutex biasanya tidak diterapkan untuk menjadi adil adalah "kinerja", tetapi saya ingin lebih memahami apa artinya - khususnya, bagaimana merelaksasi persyaratan keadilan mutex meningkatkan kinerja? Sepertinya mutex "adil" akan sepele untuk diterapkan - cukup kunci () tambahkan utas panggilan ke ujung daftar tertaut mutex sebelum meletakkan utas untuk tidur, lalu buka () pop utas berikutnya dari kepala daftar yang sama dan bangunkan.
Wawasan mutex-implementasi apa yang saya lewatkan di sini, yang akan menjelaskan mengapa dianggap layak mengorbankan keadilan untuk kinerja yang lebih baik?