系统相关
首页 > 系统相关> > 在Linux中等待队列vs信号量

在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
};

Reference

标签:operating-system,linux-kernel,linux-device-driver,linux
来源: https://codeday.me/bug/20191031/1977859.html