Я читаю «понятия 10-й операционной системы».
Это дает определение семафора, не ожидающего занятости:
typedef struct {
int value;
struct process *list;
} semaphore;
wait(semaphore *S) {
S->value--;
if (S->value < 0) {
add this process to S->list;
sleep();
}
}
signal(semaphore *S) {
S->value++;
if (S->value <= 0) {
remove a process P from S->list;
wakeup(P);
}
}
В нем говорится:
Важно признать, что мы не полностью исключили занятое ожидание с этим определением операций wait () и signal ().Скорее, мы перешли в ожидание с раздела входа в критические разделы прикладных программ.Кроме того, мы ограничиваем занятое ожидание критическими секциями операций wait () и signal ()
Я могу понять в этом определении, нам также нужен некоторый механизм для защиты критической секции ожидания() и код сигнала ().
Но что значит «мы переместились в ожидании из раздела ввода в критические разделы прикладных программ»?
Почему программист используетсемафору по этому определению нужно использовать занятое ожидание внутри критической секции своего кода?