4

我需要同步多个线程(使用 POSIX 线程)。此外,我正在使用条件变量(监视器)来实现这一点。

问题是我必须实施“先到先得”的策略。假设多个线程正在等待另一个线程发出条件变化的信号,pthread_cond_wait调用是否将线程本身放入队列中,或者我应该定义一个显式队列来实现这一点?一个可能的解决方案也可能是使用锁。

4

1 回答 1

0

Pthreads API 不保证pthread_cond_wait+ pthread_cond_signal/pthread_cond_broadcast组合的公平性。该规范明确指出调度策略将确定等待线程唤醒的顺序:

如果多个线程在一个条件变量上被阻塞,调度策略将确定线程被解除阻塞的顺序。

如果您不想依赖调度程序(即使它是像 Linux 的 CFS 一样“老化得很好”的调度程序),您需要自己控制停车和取消停车。

至于公平等待队列的实现,您可以在MCS 队列之上构建。

于 2016-04-30T11:07:52.047 回答