Семафор Основные операции
Прежде всего, пожалуйста, извините меня, если это не правильное место для моего вопроса.
Я готовлюсь к экзамену, и это типовой вопрос, который был задан:
Задача, заданная в предыдущем экзамене:
Студенты решают встретиться и пойти посмотреть фильм. Студенты решают встретиться и пойти посмотреть фильм. решили встретиться и пойти посмотреть фильм. После того, как они собираются в группы group_size, они идут покупать билеты. Каждый студент студент студент покупает свой билет (становится клиентом). Есть два билетных киоска (в каждом киоске есть один клерк). Если клерк доступен, он будет обслуживать следующего клиента онлайн (по одному клиенту за раз). Есть только одна линия для обеих кабин.
Используя семафоры и операции над семафорами, синхронизируйте два типа потоков: Student и Clerk. Есть numStundents (по умолчанию 9) и numClerks (по умолчанию 2). Учтите, что рано утром на стенде нет клиентов. С точки зрения клерка (это зависит от вас) вы можете считать, что оба клерка уже работали или что ни один из них еще не прибыл (когда появился первый клиент). Клиентов больше, чем numStudents. Укажите тип, начальное значение каждого используемого семафора и кратко объясните его использование. Не используйте логические переменные, если их использование может быть заменено семафорами. Примерно перед синхронизацией возможный псевдокод выполнения для потоков может быть:
Student ( ) { arrive to meeting place // napping group together go buy ticket buy ticket //napping watch movie // napping } Clerk ( ) { get to workplace // napping while(true) { serve customer // if ∃ a customer } }
Если кто-нибудь поможет мне решить этот вопрос, я буду очень признателен.
1 ответ
Так как предоставление реального кода вам не поможет, вот несколько советов:
Вы должны поддерживать очередь ожидающих учеников, которая должна блокироваться каждый раз, когда клерк решает принять ученика, и освобождается, когда клерк заканчивает, продавая билеты ученику (ам).
Вам нужно использовать wait(), чтобы перевести клерков и учеников в "спящий режим", в то время как ваш семафор = 0
Подумайте о сценарии, в котором вы можете зайти в тупик (клерк никогда не снимает блокирующий / убывающий семафор и т. Д.)