小编Bum*_*Cho的帖子

信号量中的“S->value <= 0”signal() 实现,没有忙等待

以下是signal()无忙等待(无忙等待)信号量中的操作代码

实施signal()

signal (semaphore *S) {
    S->value++; 
    if (S->value <= 0) { 
        remove a process P from S->list; 
        wakeup(P);  
    } 
}
Run Code Online (Sandbox Code Playgroud)

我有一个关于“if-condition”的问题。

我认为,S->value零或负的事实意味着没有可用资源,所以wakeup()不应该被允许。但是正如您所看到的,无论何时signal()调用操作,无论S->value.

所以在我看来,不平等的迹象S->value >= 0是自然的,也是有道理的,因为S->value > 0意味着有可用的资源。

有人可以用简单的英语向我解释吗?

synchronization signals semaphore

5
推荐指数
1
解决办法
2457
查看次数

标签 统计

semaphore ×1

signals ×1

synchronization ×1