标签: multithreading c++11 locking mutex
我发现的一些代码中出现了以下情况。很多(大约10个)线程使用一个互斥锁来写入或读取地图。使用lock_guard完成互斥锁定。我的问题是关于线程数增加和10个线程同时等待互斥锁的情况。我知道订单无法保证。对这种情况有任何副作用吗?是否至少保证每个线程都能够锁定互斥锁,或者是否存在永远无法访问数据结构的线程,因为其他线程更快?
答案 0 :(得分:1)
你似乎要问的是饥饿 - 如果线程始终处于争用状态,那么线程永远不会访问互斥锁。
std::mutex不公平"。更重要的是,它不是饥饿安全的。在这种情况下,单个线程没有正向进度保证。
std::mutex
您可以创建更复杂的数据结构,以保证公平甚至前进,但它们会有更多的开销。
您可能需要考虑使用c++17中的std::shared_mutex或c++14中的std::shared_timed_mutex来减少争用,因为这样可以让多个读者更快地清除
std::shared_mutex
std::shared_timed_mutex