This question already has an answer here:
Do mutex locks happen in the same order they are asked?
(1 个回答)
7年前关闭。
正如问题所述,
documentation 根本没有解决这个问题。
(1 个回答)
7年前关闭。
正如问题所述,
std::mutex
公平吗?即,如果线程 A 锁定了互斥锁,然后 B 和 C 按此顺序对其调用了“lock()”,它们是否会以相同的顺序获取互斥锁上的锁,还是未指定顺序?documentation 根本没有解决这个问题。
最佳答案
该标准(第 30.4 节)没有提及有关互斥锁上竞争线程之间公平性的任何要求,因此它可能公平也可能不公平。
在实践中 std::mutex
实现可能会使用他们平台提供的任何互斥实现,这很不公平,因为这通常更简单、更有效。在 window 上,例如互斥锁大多是公平的,但并非总是如此。一些实现,例如线程构建块提供了公平的特殊互斥锁,但这些互斥锁不是基于操作系统的 native 互斥锁,并且通常作为自旋锁实现(它们有自己的警告)。
10-08 16:02