【发布时间】:2013-04-01 09:41:19
【问题描述】:
我只是想知道 C++11 中是否有任何锁定策略可以防止线程饥饿。
我有一堆线程正在竞争一个互斥锁。现在,我的问题是离开关键部分的线程立即开始竞争相同的互斥体,并且大多数时间都获胜。因此,等待互斥锁的其他线程正在挨饿。
我不想让离开临界区的线程休眠一些最短时间,以便让其他线程有机会锁定互斥体。
我认为必须有一些参数可以为等待互斥锁的线程启用公平锁定,但我找不到任何合适的解决方案。
好吧,我找到了 std::this_thread::yield() 函数,它假设重新调度线程执行的顺序,但它只是对调度程序线程的提示,并且取决于调度程序线程的实现是否重新调度线程。
有什么方法可以为在 C++11 中等待同一个互斥锁的线程提供公平的锁定策略? 通常的策略是什么?
谢谢
【问题讨论】:
-
stackoverflow.com/questions/11666610/…这里有一个链接可以帮助你!!
-
这似乎是一个设计问题而不是线程饥饿问题,您能否发布代码让人们看到它并可能提供帮助。
-
你通常不应该有一堆线程竞争一个互斥锁——如果你的代码是只有一个线程可以同时工作的串行代码,为什么不使用更少的线程呢?有正当理由,但不都是一样的正当理由,可以有不同的答案!
-
我有一堆线程竞争一个互斥锁的原因是我试图实现监视器设计模式来解决哲学家就餐问题。 IE。所有在共享数据上运行的方法都通过监视器公共方法同步。每个公共方法在开始时都会锁定互斥锁,检查它是否可以继续,如果不能,则暂停并等待条件变量。
标签: c++ multithreading c++11 locking