在一个多线程的Linux应用程序中,我使用互斥锁来保护关键部分。这非常有效,但公平性是个问题。可能会发生这样的情况:一个线程离开关键部分并立即重新进入,不给其他线程任何机会。例如:
while(true)
{
critsect.enter();
... do calculations ...
... maybe call a blocking operation so we sleep ...
critsect.leave();
}
可能会很有可能阻止其他线程进入同一关键部分。互斥锁不公平。
有没有办法使关键部分变得公平?我考虑添加一个队列,以便按照它们的“到达”顺序执行关键部分。或者至少计数器,如果其他线程正在等待,则在解锁后进行pthread_yield()。
这种要求有推荐的做法吗?