使用条件变量(监视器)同步线程

时间:2016-04-30 10:02:37

标签: c++ multithreading pthreads race-condition monitors

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

问题是我必须实施先到先得"战略。假设多个线程正在等待另一个线程发出条件更改的信号,pthread_cond_wait调用是否将线程放入队列本身,还是应该定义一个显式队列来实现此目的?对此的可能解决方案也可能是使用锁。

1 个答案:

答案 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之上。