在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
};
标签:operating-system,linux-kernel,linux-device-driver,linux 来源: https://codeday.me/bug/20191031/1977859.html