我的理解是,互斥锁的大多数流行实现(例如C ++中的std :: mutex)都不保证公平性 -也就是说,它们不保证在争用的情况下线程将按其获取锁的顺序进行操作。称为lock()。实际上,甚至有可能(尽管希望很罕见)在争用较高的情况下,某些等待获取互斥锁的线程可能永远无法获取它。
对我而言,这似乎是无益的行为-在我看来,公平的互斥体所产生的行为更符合程序员的期望/期望。
给出互斥量通常不被实现为公平的原因是“性能”,但我想更好地理解这意味着什么-特别是,放宽互斥量的公平性要求如何提高性能?看起来“公平”的互斥锁似乎是微不足道的实现-只需将lock()将调用线程附加到互斥锁的链表的末尾,然后再将其置于睡眠状态,然后使unlock()从下一个弹出线程相同列表的开头并将其唤醒。
我在这里缺少什么互斥体实现的见解,可以解释为什么认为为了提高性能而牺牲公平性是值得的吗?