为什么我们在linux内核中使用等待队列,而不是使用信号量进行同步?使用等待队列和信号量进行同步有什么区别?
发布于 2012-10-29 14:35:16
信号量是一种变量或抽象数据类型,它提供了一种简单但有用的抽象,用于控制并行编程环境中多个进程对公共资源的访问。()
现在,信号量更多的是一个概念,而不是一个具体的实现。
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
};
https://stackoverflow.com/questions/13116779
复制相似问题