This question already has an answer here:
Do mutex locks happen in the same order they are asked?

(1 个回答)


7年前关闭。




正如问题所述,std::mutex 公平吗?即,如果线程 A 锁定了互斥锁,然后 B 和 C 按此顺序对其调用了“lock()”,它们是否会以相同的顺序获取互斥锁上的锁,还是未指定顺序?

documentation 根本没有解决这个问题。

最佳答案

该标准(第 30.4 节)没有提及有关互斥锁上竞争线程之间公平性的任何要求,因此它可能公平也可能不公平。

在实践中 std::mutex 实现可能会使用他们平台提供的任何互斥实现,这很不公平,因为这通常更简单、更有效。在 window 上,例如互斥锁大多是公平的,但并非总是如此。一些实现,例如线程构建块提供了公平的特殊互斥锁,但这些互斥锁不是基于操作系统的 native 互斥锁,并且通常作为自旋锁实现(它们有自己的警告)。

10-08 16:02