Семафоры в «Спящем профессоре» Трассировка кода? - PullRequest
1 голос
/ 31 октября 2019

Я работаю над некоторыми проблемами семафоров в сценарии Спящего профессора. Используется модель подсчета семафоров. Вот основные рекомендации:

  1. Зал ожидания (критическая секция) имеет 3 стула. В кабинете профессора есть 1 стул для размещения одного студента за один раз.
  2. Если в кабинете нет студентов, профессор уснет.
  3. Когда прибудет студент, профессор проснетсявверх. Если профессор спит, студент будит профессора.
  4. Если студент приходит в зону ожидания и все стулья заняты, студент уходит.
  5. Если профессор занят с другим студентом, номесто для ожидания доступно, студент ждет в одном из свободных кресел.

Прямо сейчас, это псевдокод, который я написал для Задачи Спящего профессора:

/* 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/) самостоятельно из аналогичной проблемы парикмахера.

...