以下是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意味着有可用的资源。
有人可以用简单的英语向我解释吗?