ความเข้าใจของฉันคือการใช้งาน mutex ที่นิยมมากที่สุด (เช่น std :: mutex ใน C ++) ไม่รับประกันความเป็นธรรม - นั่นคือพวกเขาไม่รับประกันว่าในกรณีของการช่วงชิงการล็อคจะถูกรับโดยเธรดตามลำดับที่พวกเขา เรียกว่าล็อค () ในความเป็นจริงมันเป็นไปได้ (แม้จะหวังว่าผิดปกติ) ว่าในกรณีที่มีการโต้แย้งสูงบางกระทู้ที่รอรับ mutex อาจไม่เคยได้รับ
นี่ดูเหมือนว่าพฤติกรรมที่ไม่ช่วยเหลือฉัน - ดูเหมือนว่า mutex ที่ยุติธรรมจะให้ผลการทำงานที่สอดคล้องกับสิ่งที่โปรแกรมเมอร์ต้องการ / คาดหวัง
เหตุผลที่กำหนดว่าทำไมโดยทั่วไปแล้วการใช้งาน mutex จะไม่ถูกนำมาใช้เพื่อความยุติธรรมคือ "ประสิทธิภาพ" แต่ฉันต้องการทำความเข้าใจให้ดีขึ้นว่าอะไรคือความหมาย - โดยเฉพาะอย่างยิ่งการผ่อนคลายข้อกำหนดความเป็นธรรมของ mutex จะปรับปรุงประสิทธิภาพอย่างไร ดูเหมือนว่า mutex ที่ "ยุติธรรม" จะใช้งานได้ง่ายเพียงแค่มี lock () ต่อท้ายเธรดการเรียกไปยังส่วนท้ายของรายการที่เชื่อมโยงของ mutex ก่อนที่จะวางเธรดเข้าสู่โหมดสลีปแล้วปลดล็อก () ป๊อปเธรดถัดไปจาก หัวของรายการเดียวกันนั้นและปลุกมันขึ้นมา
ฉันขาดความเข้าใจในการใช้งาน mutex อะไรที่นี่ซึ่งจะอธิบายว่าทำไมการพิจารณาเสียสละเพื่อความยุติธรรมเพื่อประสิทธิภาพที่ดีขึ้นถือว่าคุ้มค่า