如果多于一个线程在条件变量上等待,在pthread_cond_signal上唤醒的顺序是什么。我已经读过,pthread_cond_signal不一定按睡眠顺序醒来。所以这可能会导致饥饿......不是吗?pthread_cond_signal和可能的线程饥饿
谢谢
如果多于一个线程在条件变量上等待,在pthread_cond_signal上唤醒的顺序是什么。我已经读过,pthread_cond_signal不一定按睡眠顺序醒来。所以这可能会导致饥饿......不是吗?pthread_cond_signal和可能的线程饥饿
谢谢
不保证公平性,所以饥饿总是可能的。 为确保绝对公平,您需要使用队列实现您自己的机制以跟踪到达顺序。
此问题建议滥用条件变量。条件变量的使用是通知线程发生了一个条件。当你只唤醒一个线程时,它必须是因为任何线程都可以为服务。如果你关心哪个线程被唤醒,那么任何线程都不能处理这个状态。
尽管在大多数实现中你可能会得到你想要的东西,但可能有更好的方法来做任何你想要做的事情。
谢谢...我如何找到使用的调度策略。默认情况下,具有最高优先级的线程被唤醒,但是如果所有线程都相同,则它不确定。 –
@Juggler - 这是操作系统内核的一部分,通常调度算法不像您刚才描述的那样简单,并且包含确保公平的手段。除非您自己编写调度算法,否则我会认为这是公平的,这是调度的基本要求。 – littleadv