【发布时间】:2015-08-30 12:55:45
【问题描述】:
以下是信号量中signal()操作无忙等待(无忙等待)的代码
signal()的实现:
signal (semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from S->list;
wakeup(P);
}
}
我对“if-condition”有疑问。
我认为,S->value 为零或负数意味着没有可用资源,因此不应允许wakeup()。
但正如您所见,每当调用signal() 操作时,无论S->value 的状态如何,都会唤醒一个进程(在等待列表中)。
所以在我看来,
不平等的标志S->value >= 0 是自然而然的,因为S->value > 0 意味着有可用的资源。
有谁可以用简单的英语给我解释一下吗?
【问题讨论】:
标签: synchronization signals semaphore