在linux中等待队列与信号量

时间:2012-10-29 06:21:58

标签: linux linux-kernel operating-system linux-device-driver

为什么我们在linux内核中使用等待队列而不是使用信号量进行同步?使用等待队列与信号量进行同步有什么区别?

1 个答案:

答案 0 :(得分:4)

信号量是一种变量或抽象数据类型,它提供了一个简单但有用的抽象,用于控制多个进程对并行编程环境中的公共资源的访问。 (的 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