pthread_cond_signal和可能的线程饥饿

时间:2011-06-19 08:56:27

标签: c linux pthreads

如果有多个线程在条件变量上等待,那么在pthread_cond_signal上唤醒的顺序是什么。我已经读过pthread_cond_signal不一定会按照睡眠的顺序醒来。所以这可能导致饥饿......不是吗?

由于

3 个答案:

答案 0 :(得分:4)

这是由调度策略决定的,这应该是公平的。

如果线程没有按计划进行饥饿 - 它们也不应该是这样。

来自spec

  

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

答案 1 :(得分:1)

不保证公平,所以饥饿永远是可能的。 为确保绝对公平,您需要使用队列实现自己的机制,以跟踪到达的顺序。

答案 2 :(得分:0)

这个问题建议滥用条件变量。条件变量的使用是警告线程已发生条件。当您只唤醒一个线程时,必须是因为任何线程可以为该条件提供服务。如果您关心哪个线程唤醒,那么任何线程都不能为该条件提供服务。

虽然在大多数实现中你可能会得到你想要的东西,但是你可能有更好的方法去做你想做的事情。