2011-06-19 41 views
2

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

谢谢

回答

4

这是由调度政策,这应该是公平的。

如果线程没有通过调度饿死 - 它们也不应该被这个调用。

spec

如果多于一个线程被阻塞条件变量,调度政策确定哪些线程是畅通的顺序。

+0

谢谢...我如何找到使用的调度策略。默认情况下,具有最高优先级的线程被唤醒,但是如果所有线程都相同,则它不确定。 –

+0

@Juggler - 这是操作系统内核的一部分,通常调度算法不像您刚才描述的那样简单,并且包含确保公平的手段。除非您自己编写调度算法,否则我会认为这是公平的,这是调度的基本要求。 – littleadv

1

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

0

此问题建议滥用条件变量。条件变量的使用是通知线程发生了一个条件。当你只唤醒一个线程时,它必须是因为任何线程都可以为服务。如果你关心哪个线程被唤醒,那么任何线程都不能处理这个状态。

尽管在大多数实现中你可能会得到你想要的东西,但可能有更好的方法来做任何你想要做的事情。