1
以下是在沒有忙等待旗語signal()
操作的代碼(沒有忙等待)「S->值<= 0」信號()中旗語執行沒有忙等待
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
意味着有可用的資源。
有沒有人可以用簡單的英語向我解釋?