很多线程在等待互斥锁



在我找到的一些代码中发生了以下情况。许多(大约 10 个(线程使用一个互斥锁来写入或读取映射。互斥锁通过lock_guard完成。我的问题是关于线程数增加并且 10 个线程同时等待互斥锁的情况。我知道订单没有保证。这种情况有什么副作用吗?是否至少可以保证每个线程都能够锁定互斥锁,或者是否有线程因为其他线程更快而永远没有机会访问数据结构?

您似乎在问的是饥饿 - 如果线程始终处于争用状态,它是否永远无法访问互斥锁。

std::mutex是不"公平的"。 不仅如此,它不是饥饿安全的。 在这种情况下,单个线程没有向前进度保证。

您可以创建更复杂的数据结构来保证公平性甚至前进进度,但它们的开销更大。

您可能需要考虑在 c++17 中使用 std::shared_mutex 或在 c++14 中使用 std::shared_timed_mutex 来减少争用,因为这将允许多个读取器更快地清除。

最新更新