如果多个线程等待一个条件变量,那么在pthread_cond_signal上唤醒的顺序是什么。我读到过pthread_cond_signal不一定是按照睡眠顺序醒来的。那么这可能会导致starvation...is不呢?
谢谢
发布于 2011-06-19 16:58:53
这是由计划策略决定的,这应该是公平的。
如果线程不会因为调度而耗尽资源,那么它们也不应该因此而匮乏。
从spec
如果在条件变量上阻塞了多个线程,则调度策略将确定线程解除阻塞的顺序。
发布于 2011-06-22 00:00:29
公平性得不到保证,所以饥饿总是有可能的。为了确保绝对公平,您需要实现自己的机制,使用队列来跟踪到达的顺序。
发布于 2011-08-30 21:23:22
这个问题表明滥用了条件变量。条件变量的用法是警告线程某个条件已经发生。当您只唤醒一个线程时,这一定是因为任何线程都可以服务于该条件。如果您关心哪个线程唤醒,那么并不是任何线程都可以服务于该条件。
虽然您可能会在大多数实现中得到您想要的东西,但可能有一种更好的方法来做您想要做的事情。
https://stackoverflow.com/questions/6401474
复制相似问题