Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Взаимное исключение + семафоры.docx
Скачиваний:
1
Добавлен:
24.09.2019
Размер:
1.35 Mб
Скачать
  1. Решение:

Инициализация:

{ “Вилки”, которые используются философами – это разделяемые ресурсы, защищенные бинарными семафорами: }

common B: array[0..4] of binary semaphore; { глобальный массив семафоров}

for I:=0 to 4 do B[I]:=1; { все “вилки” свободны }

process Философ(I: Integer);

{ Это процесс, описывающий поведение I-го философа. }

{ “Вилки”, которыми он ест, защищаются двумя бинарными семафорами. }

common B: array[0..4] of binary semaphore

begin { Пытается получить вилки: }

while (P(B[I])=0) or (P(B[(I+1) mod 5])=0) do ;

//P(B[I]) не возвращает значение

{ Ест спагетти, используя вилки, находящиеся слева и справа } …

{ Освобождает вилки: } V(B[(I+1) mod 5]); V(B[I]);

end;

  1. Решение:

Инициализация:

{ “Вилки”, которые используются философами – это разделяемые ресурсы, защищенные бинарными семафорами: }

common B: array[0..4] of binary semaphore; { глобальный массив семафоров}

for I:=0 to 4 do B[I]:=1; { все “вилки” свободны }

process Философ(I: Integer);

{ Это процесс, описывающий поведение I-го философа. }

{ “Вилки”, которыми он ест, защищаются двумя бинарными семафорами. }

common B: array[0..4] of binary semaphore

begin

{ Пытается получить вилки: }

P(B[I]); P(B[(I+1) mod 5]);

{ Ест спагетти, используя вилки, находящиеся слева и справа } …

{ Освобождает вилки: }

V(B[(I+1) mod 5]); V(B[I]);

end;

//все философы одновременно взяли по 1 вилке и все застряли на «P(B[(I+1) mod 5]);». Смертельные объятия.