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