【问题标题】:wait queues vs semaphores in linuxlinux中的等待队列与信号量
【发布时间】:2012-10-18 11:33:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 这是否意味着可以实现等待队列来代替信号量?当等待队列优于信号量时,是否还有任何实例?
    • @sanrioalvares 请重新阅读答案。当您使用等待队列时,为了确保没有资源冲突,您已经实现了一个信号量(它控制对公共资源的访问)。等待队列包含在信号量中。
    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多