Я работаю над некоторыми проблемами семафоров в сценарии Спящего профессора. Используется модель подсчета семафоров. Вот основные рекомендации:
- Зал ожидания (критическая секция) имеет 3 стула. В кабинете профессора есть 1 стул для размещения одного студента за один раз.
- Если в кабинете нет студентов, профессор уснет.
- Когда прибудет студент, профессор проснетсявверх. Если профессор спит, студент будит профессора.
- Если студент приходит в зону ожидания и все стулья заняты, студент уходит.
- Если профессор занят с другим студентом, номесто для ожидания доступно, студент ждет в одном из свободных кресел.
Прямо сейчас, это псевдокод, который я написал для Задачи Спящего профессора:
/* Counting semaphores - the integer value represents the initial count for the semaphores */
Semaphore students = 0; /* Number of students waiting for service */
Semaphore professor = 0; /* Number of professors waiting for students */
Semaphore mutex = 1; /* Mutual exclusion when accessing the waiting room */
int waiting = 0; /* Students waiting for turn with professor */
Professor() {
while (office hours) {
wait (students); /* Go to sleep if no students */
wait (mutex); /* Get access to waiting room */
waiting = waiting - 1; /* Decrement number of waiting students */
signal (professor); /* One professor is ready */
signal (mutex); /* Releasing waiting room */
ConsultWithStudent();
}
}
Student() {
wait (mutex); /* Enter critical section, which is the waiting room */
if (waiting < 3) { /* If there are free chairs in the waiting room */
waiting = waiting + 1;
signal (students); /* Wake up professor is necessary */
signal (mutex); /* Release access to count of waiting students */
wait (professor); /* Wait for professor if not available */
GetHelpFromProfessor();
} else {
signal (mutex); /* Waiting area is full, leave without waiting */
}
}
У меня есть пара проблем с трассировкой кода, которые я преодолел, и мне было интересно, подходит ли мой счетчик семафоров для каждого из них:
Сценарий 1: Предположим, профессор приходит в ее офисчасов, а затем прибывает студент. Предположим, профессор в настоящее время консультируется с этим студентом. Количество семафоров выглядит следующим образом:
Семафор Подсчет
Учащиеся 1
Мьютекс 0
Профессор1
Сценарий 2: Пока профессор разговаривает с первым студентом, прибывают еще 4 студента. Показать итоговый счет для семафоров:
Семафор Подсчет
Учащиеся 1
Мьютекс 3
Профессор 1
Сценарий 3: Профессор заканчивает разговор с первым учеником, и этот ученик уходит. Профессор начинает разговаривать со вторым студентом. Покажите итоговое количество семафоров, пока профессор разговаривает со вторым студентом:
семафор Подсчет
Студенты 1
Mutex 2
Профессор 1
Может ли кто-нибудь помочь мне с рецензией на мою работу? Да, это для домашней работы, и я пытаюсь понять семафоры после создания псевдокода (https://www.geeksforgeeks.org/sleeping-barber-problem-in-process-synchronization/) самостоятельно из аналогичной проблемы парикмахера.