linux - 将 linux 内核信号量初始化为负数是否合法?

标签 linux linux-kernel

假设我想在 n 个单独的事件发生后唤醒一个任务。将信号量初始化为 1 - n 并向下()它是否合法,所以我在每个事件都向上()它之后醒来?

最佳答案

我不这么认为。

(1) semephore.count 声明为unsigned int。参见信号量定义:

    struct semaphore {
        spinlock_t      lock;
        unsigned int        count;
        struct list_head    wait_list;
    };

(2) down() 函数会在减少计数值之前检查计数值,确保计数不为负数。

除非你实现一种机制,否则你不能直接使用信号量来完成你的要求。

关于linux - 将 linux 内核信号量初始化为负数是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982877/

相关文章:

memory-management - 在 Linux 中模拟设备 - 需要一种在 RAM 中分配资源的方法

linux - 在 linux 中使用 posix 消息队列的单个发送者和多个接收者进程

ruby - Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

linux - 在输出 grep 的地方保留新行

android - 如何将已编译的 android 内核文件 'Image.gz-dtb' 转换为可刷新的 .zip 或 .img 文件?

c - 使用 insmod 时 undefined symbol

Linux 内核 : How to capture a key press and replace it with another key?

linux - 自定义 Linux 内核中内置的 Initramfs 未运行

linux - 什么会导致 CentOS 无法安装在某些硬件上?

linux - CentOS 中主机名未正确解析