IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> «Спящий брадобрей»., Задача по параллельному программированию
сообщение
Сообщение #1


Гость






Помогите, кто может Решить одну из классических проблем межпроцессного взаимодействия:«Спящий брадобрей».
Имеется парикмахерская с двумя дверями и несколькими креслами. Посетители входят в одну дверь и выходят через другую. Парикмахер всю жизнь обслуживает клиентов. Когда клиентов нет, он спит в своем кресле. Когда посетитель приходит в салон и видит спящего парикмахера, он будит его, садится в кресло и спит, пока тот занят стрижкой. Если во время стрижки приходит еще один клиент, он садится в одно из свободных кресел и засыпает. Если свободных мест нет, клиент уходит. После стрижки парикмахер открывает клиенту выходную дверь и закрывает ее за ним. Если есть ожидающие посетители, парикмахер будит одного из них и ждет, пока тот сядет в кресло, после чего стрижет его. Если посетителей нет, парикмахер идет спать до следующего клиента.
Таким образом, эта задача описывает отношения в системах «клиент-сервер», когда клиент посылает запрос и ждет ответа сервера. В свою очередь сервер ожидает запросы клиентов, обрабатывает их и посылает ответ.
Множество запросов клиентов образуют очередь, длина которой ограничена.

При решении учесть, что длительность каждой операции составляет некоторую случайную величину.
Предоставить решение в двух вариантах:
1.с использованием семафоров в условиях разделяемой памяти;
2.с использованием сообщений в условиях распределенной памяти.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #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);
}
Но если ему сдавать в таком виде он не очень обрадуется, или очень удивиться. Можно ее написать в другом виде? Так, чтобы он не догадался откуда это. И кроме того остается еще второй пункт...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 8:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name