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