3
为什么我们用等待队列在Linux内核中,而不是使用信号灯同步?使用等待队列和信号量进行同步有什么区别?等待队列VS信号量在linux
为什么我们用等待队列在Linux内核中,而不是使用信号灯同步?使用等待队列和信号量进行同步有什么区别?等待队列VS信号量在linux
信号量是可变的或抽象的数据类型,它提供了用于控制由多个进程访问公共资源在并行编程环境的简单,但有用的抽象。 (Wikipedia)
现在,信号量更是一个概念,而不是一个具体的实现。
linux 信号量数据结构实现使用等待队列。如果没有一个等待队列,你不会不知道哪个进程要求的第一资源,这可能会导致非常大的等待时间对于一些。等待队列确保公平,和消退的资源匮乏问题。
struct semaphore {
int count; //+ve or -ve indicates resource free/busy state
int waking; //number of waiting processes
int lock ; /* to make waking testing atomic */
struct wait_queue *wait; //queued, to prevent starvation, ensure fairness
};
是否意味着waitqueues可代替信号灯来实现?当waitqueue比信号量更受欢迎时,是否还有任何insta? – shinymetal
@sanrioalvares请重新阅读的答案。当你使用等待队列时,为了确保没有资源冲突,你已经实现了一个信号量(这是控制对一个公共资源的访问的东西)。等待队列包含在信号量中。 –