等待互斥的很多线程

时间:2018-01-31 10:40:42

标签: multithreading c++11 locking mutex

我发现的一些代码中出现了以下情况。很多(大约10个)线程使用一个互斥锁来写入或读取地图。使用lock_guard完成互斥锁定。我的问题是关于线程数增加和10个线程同时等待互斥锁的情况。我知道订单无法保证。对这种情况有任何副作用吗?是否至少保证每个线程都能够锁定互斥锁,或者是否存在永远无法访问数据结构的线程,因为其他线程更快?

1 个答案:

答案 0 :(得分:1)

你似乎要问的是饥饿 - 如果线程始终处于争用状态,那么线程永远不会访问互斥锁。

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

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

您可能需要考虑使用中的std::shared_mutex中的std::shared_timed_mutex来减少争用,因为这样可以让多个读者更快地清除