我需要同步多个线程(使用POSIX线程)。而且,我正在利用条件变量(监视器)来实现这一点。
问题是我必须实施先到先得"战略。假设多个线程正在等待另一个线程发出条件更改的信号,pthread_cond_wait
调用是否将线程放入队列本身,还是应该定义一个显式队列来实现此目的?对此的可能解决方案也可能是使用锁。
答案 0 :(得分:0)
Pthreads API不保证https://view.officeapps.live.com/op/embed.aspx?src={document_url}
+ pthread_cond_wait
/ pthread_cond_signal
组合的公平性。 spec明确指出调度策略将确定等待线程将被唤醒的顺序:
如果在条件变量上阻塞了多个线程,则调度策略应确定线程被解除阻塞的顺序。
如果您不想依赖调度程序(即使它是has "aged well" like Linux' CFS),您需要控制停车并自行停车。
至于公平等待队列的实施,您可以建立在MCS queue之上。