Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС Нижний.pdf
Скачиваний:
13
Добавлен:
25.03.2023
Размер:
2.75 Mб
Скачать

Лабораторный практикум по курсу "Операционные системы"

while( true ){

 

 

think();

//

Философ размышляет

take_forks(i);

//

Получает 2 вилки или блокируется

eat();

//

Философ обедает

put_forks(i);

//

Кладет на стол обе вилки

}

 

 

}

 

 

void take_forks( int i){

 

 

P(Mutex);

//

Вход в критическую область

state[i] = HUNGRY;

//

Наличие голодного философа

test(i);

//

Попытка получить две вилки

V(Mutex);

//

Выход из критической области

P(s[i]);

//

Блокируемся, если вилок не досталось

}

 

 

void put_forks( int i){

 

 

P(Mutex);

//

Вход в критическую область

state[i] = THINKING;//

Наличие голодного философа

test(LEFT);

//

Попытка накормить соседа слева

test(RIGHT);

//

Попытка накормить соседа справа

V(Mutex);

//

Выход из критической области

}

 

 

void test( int i ){

 

 

if(state[i]==HUNGRY&&state[LEFT]!=EATING&& state[RIGHT]!=EATING){ state[i] = EATING;

V(s[i]);

}

}

Проблема спящего брадобрея

Данная задача формулируется следующим образом.

Впарикмахерской есть один брадобрей, его кресло и N стульев для посетителей. Если желающих воспользоваться его услугами нет, брадобрей сидит и спит. Если в парикмахерскую приходит клиент, он должен разбудить брадобрея. Если клиент приходит и видит, что брадобрей занят, он либо садится на стул (если есть место), либо уходит (если места нет).

Впредлагаемом решении используется три семафора: Customers, для подсчета ожидающих посетителей (клиент в кресле брадобрея не учитывается, поскольку он уже не ждет), Barbers

Учебно-исследовательская лаборатория «Информационные технологии» 83

Соседние файлы в предмете Современные операционные системы