我需要同步多个线程(使用POSIX线程)。此外,我正在使用条件变量(监视器)来实现这一点。
问题是,我必须执行"先到先得"的战略。假设多个线程正在等待另一个线程发出条件更改的信号,那么pthread_cond_wait
调用是将线程本身放入队列中,还是应该定义一个显式队列来实现这一点?对此,一个可能的解决方案也可能是使用锁。
Pthreads API不保证pthread_cond_wait
+pthread_cond_signal
/pthread_cond_broadcast
组合的公平性。规范明确指出,调度策略将决定等待线程唤醒的顺序:
如果一个条件变量上有多个线程被阻止,则调度策略应确定线程被阻止的顺序。
如果你不想依赖调度器(即使它像Linux的CFS一样"老化得很好"),你需要自己控制停车和解锁。
至于公平等待队列的实现,您可以在MCS队列之上构建。