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

时间:2013-07-31 23:42:30

标签: linux linux-kernel

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

3 个答案:

答案 0 :(得分:5)

我不这么认为。

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

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

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

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

答案 1 :(得分:1)

计数是未签名的,所以当你认为你将它设置为负数时,它实际上是一个非常大的正数。所以不,你不能。

答案 2 :(得分:1)

这不是一个好主意,因为它是未签名的。此外,信号量仅在为正数时才会被激活,因此将信号量初始化为负数会导致信号量大,这将导致您的信号量允许访问您想要限制的信号。