Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
| -Базилио- |
17.07.2007 18:48
Сообщение
#1
|
|
Гость |
Помогите, кто может Решить одну из классических проблем межпроцессного взаимодействия:«Спящий брадобрей».
Имеется парикмахерская с двумя дверями и несколькими креслами. Посетители входят в одну дверь и выходят через другую. Парикмахер всю жизнь обслуживает клиентов. Когда клиентов нет, он спит в своем кресле. Когда посетитель приходит в салон и видит спящего парикмахера, он будит его, садится в кресло и спит, пока тот занят стрижкой. Если во время стрижки приходит еще один клиент, он садится в одно из свободных кресел и засыпает. Если свободных мест нет, клиент уходит. После стрижки парикмахер открывает клиенту выходную дверь и закрывает ее за ним. Если есть ожидающие посетители, парикмахер будит одного из них и ждет, пока тот сядет в кресло, после чего стрижет его. Если посетителей нет, парикмахер идет спать до следующего клиента. Таким образом, эта задача описывает отношения в системах «клиент-сервер», когда клиент посылает запрос и ждет ответа сервера. В свою очередь сервер ожидает запросы клиентов, обрабатывает их и посылает ответ. Множество запросов клиентов образуют очередь, длина которой ограничена. При решении учесть, что длительность каждой операции составляет некоторую случайную величину. Предоставить решение в двух вариантах: 1.с использованием семафоров в условиях разделяемой памяти; 2.с использованием сообщений в условиях распределенной памяти. |
![]() ![]() |
| -Базилио- |
17.07.2007 18:58
Сообщение
#2
|
|
Гость |
У препода в лекциях, например, приведено.
Приведем решение, использующее семафоры: #define CHAIRS 5 //количество стульев semaphore customers=0; // количество ожидающих посетителей semaphore barbers=0; // количество парикмахеров, ждущих клиентов mutex m; // контроль доступа к waiting int waiting=0; // и это количество ожидающих посетителей process barber() // процесс - парикмахер { while(true) { down(customers); // если посетителей нет – уйти в ожидание lock(m); // войти в критическую область waiting--; // уменьшить количество ожидающих клиентов up(barbers); // разбудить парикмахера unlock(m); // выйти из критической области // обслуживание клиента } } process customer() // процесс - клиент { lock(m); // войти в критическую область if (waiting<CHAIRS) // если есть свободные стулья, то обслуживаться { waiting++; // увеличить счетчик ожидающих клиентов up(customers); //при необходимости – разбудить парикмахера unlock(m); // выйти из критической области down(barbers); // если парикмахер занят – уйти в ожидание // обслуживание клиента } else // нет свободных стульев - уйти unlock(m); } Но если ему сдавать в таком виде он не очень обрадуется, или очень удивиться. Можно ее написать в другом виде? Так, чтобы он не догадался откуда это. И кроме того остается еще второй пункт... |
-Базилио- «Спящий брадобрей». 17.07.2007 18:48
Tan это форум по Делфи. 18.07.2007 9:34
Гость
это форум по Делфи.
Да, я знаю. -) Но переделыв... 18.07.2007 14:07
volvo Кстати, твой преподаватель содрал это решение из к... 18.07.2007 14:13
Гость
Кстати, твой преподаватель содрал это решение из ... 18.07.2007 14:24
-Базилио- Нашел. Спасибо за подсказку. 18.07.2007 14:28
volvo Я брал здесь (зарегистрируйся, введи фамилию автор... 18.07.2007 14:30
Гость Помогите пожалуйста. Этот алгоритм у меня есть, но... 1.10.2008 14:08
volvo Что такое Up и Down написано у Таненбаума на стран... 1.10.2008 17:16![]() ![]() |
|
Текстовая версия | 15.11.2025 10:42 |