linux - 等待队列与 Linux 中的信号量

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

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

最佳答案

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

关于linux - 等待队列与 Linux 中的信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13116779/

相关文章:

linux - 当我的 linux 系统重新启动时,我应该使用什么 lilo 选项来设置要运行的脚本?

linux - 如何在 Linux 内核中捕获键盘输入

php - 如果 PHP 在 Linux 上运行;如何获取特定的发行版(Ubuntu、fedora 等)?

c - 对于为什么这些程序在 Windows 和 Linux 上运行不同的原因有什么直觉或见解吗?

linux - 为什么 ptrace 显示 32 位 execve 系统调用具有 EAX = 59,即 64 位调用号? 32 位系统调用如何在 x86-64 上工作?

android - Linux中拦截文件打开事件

自定义 PCI 驱动程序无法探测设备

linux - 构建 Linux 内核时通过 -S 选项生成汇编文件

c - FreeBSD kldload : can't load, 没有这样的文件或目录

c# - 如何获取 "friendly"操作系统版本名称?