在多线程Linux应用程序中,我使用互斥锁来处理关键部分.除公平问题外,这种方法效果很好.一个线程离开临界区并立即重新进入并不会给任何其他线程带来机会.例如
while(true)
{
critsect.enter();
... do calculations ...
... maybe call a blocking operation so we sleep ...
critsect.leave();
}
Run Code Online (Sandbox Code Playgroud)
可能很可能会阻止任何其他线程进入同一个关键部分.互斥是不公平的.
是否有解决方案来制定公平的关键部分?我正在考虑添加一个队列,以便按照"到达"的顺序执行关键部分.或者至少一个计数器可能在解锁后执行pthread_yield(),如果其他线程正在等待.
是否有针对此类要求的推荐做法?