5

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

4

3 回答 3

6

我不这么认为。

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

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

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

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

于 2013-08-01T02:05:50.337 回答
2

这不是一个好主意,因为它没有签名。此外,仅当信号量为正数时才会激活信号量,因此将信号量初始化为负数会导致信号量很大,这将导致您的信号量允许访问您希望被限制的内容。

于 2013-08-01T02:22:03.447 回答
1

计数是无符号的,因此当您认为将其设置为负数时,它实际上是一个非常大的正数。所以不,你不能。

于 2013-08-01T02:12:31.053 回答