Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРВ_14_11_02_Рандеву в _Ада.ppt
Скачиваний:
4
Добавлен:
20.06.2023
Размер:
420.35 Кб
Скачать

23. Задачи (язык Ада) Описание тела задачи

task body is <имя_задачи> <описание_данных>

begin <описание_действий>

end <имя_задачи>;

8. Задачи в АДА, механизм рандеву

 

1

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Инициирование задачи, пример

program Турист

task body Встреча is; begin

. . .

end Встреча;

task body Багаж is; begin

. . .

end Багаж;

begin initiate(Встреча); initiate(Багаж);

end Турист;

Турист Встреча Багаж

Неявная инициализация:

begin nill;

end Турист;

8. Задачи в АДА, механизм рандеву

 

2

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Синхронизация, механизм рандеву

Вызов входа:

 

 

 

 

 

 

 

 

Вход:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

task body A1 is

 

 

 

 

 

 

 

 

task body A2 is

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. . .

 

 

 

 

(2)

 

. . .

 

(1)

 

 

 

accept R do

 

 

 

A2.R;

 

 

 

 

 

<обработка входа>

 

. . .

 

 

 

 

 

 

 

 

 

end;

 

 

(3)

 

end A;

 

 

 

 

 

 

 

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end A;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

t

1

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A1

 

 

 

 

 

 

 

 

 

 

 

 

A1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I

 

 

 

 

 

 

 

ждет

 

 

 

3

 

II

 

 

 

2

 

 

 

ждет

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A2

 

 

 

 

 

 

 

 

 

 

 

 

 

t

A2

 

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ждет

8. Задачи в АДА, механизм рандеву

 

3

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Взаимное исключение

task body A1 is

begin

. . .

B.R;

. . .

end A;

task body An is

begin

. . .

B.R;

. . .

end A;

task body B is

begin loop

accept R do

. . .

end; end loop;

end A;

ОчередьДоступаКоВходу_R

8. Задачи в АДА, механизм рандеву

 

4

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Пример. Реализация механизма семафоров

task body Процесс_1;

 

begin

 

. . .

 

 

Семафор.P;

 

КритическаяСекция_1;

task body Семафор;

Семафор.V;

begin

. . .

 

loop

end;

accept P do end;

 

 

 

accept V do end;

task body Процесс_2;

end loop;

begin

end Семафор;

. . .

 

 

Семафор.P;

 

КритическаяСекция_2;

 

Семафор.V;

 

 

. . .

 

 

end;

 

8. Механизм рандеву

 

5

Сидельников В.В. vvs_home@list.ru

2011 v.02

 

Пример. Реализация механизма сигналов

task body Процесс_1; begin

loop

. . .

Сигнал.Ждать;

. . .

end loop; end;

task body Процесс_N; begin

loop

. . .

Сигнал.Послать;

. . .

end loop; end;

task body Сигнал; begin

loop

accept Послать do end; if Ждать’COUNT > 0 then accept Ждать do end;

end if; end loop; end Сигнал;

8. Механизм рандеву

 

6

Сидельников В.В. vvs_home@list.ru

2011 v.02

 

Описание задачи (опционально)

Спецификация задачи:

task <имя_задачи> is

entry <имя_входа> [(формальные_параметры)] end <имя_задачи>;

Тело задачи:

task body is <имя_задачи> <описание_данных>

begin <описание_действий>

accept <имя входа> [(<формальные параметры>)] do <описание_действий_входа>

end; <описание_действий>

end <имя_задачи>;

8. Задачи в АДА, механизм рандеву

 

7

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Описание задачи, пример (опционально)

program Преобразование_символа;

task Читать;

task Преобразовать

entry R(P: in CHARACTER); end Преобразовать;

task body Читать; Сh: CHARACTER; X: FILE;

begin

Open (X);

while not EOF(X) loop

Get(Ch);

Преобразовать.R(Ch); end loop;

Close(X) end Читать;

task body Преобразовать;

Y: CHARACTER; begin

loop

accept R(P: in CHARACTER) do

Y:= P;

end;

Put(UPPER(Y)); end loop;

end;

begin nill;

end.

8. Задачи в АДА, механизм рандеву

 

8

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Пример «Почтовый ящик» (опционально)

task body ПочтовыйЯщик;

Буфер: СООБЩЕНИЕ; begin

loop

accept Отправить(Передача: in СООБЩЕНИЕ) do Буфер:= Передача;

end;

accept Принять(Прием: out СООБЩЕНИЕ) do Прием:= Буфер;

end; end loop;

end Почтовый_Ящик;

Отправитель ПочтовыйЯщик Получатель

8. Задачи в АДА, механизм рандеву

 

9

Сидельников В.В. vvs_home@list.ru

2011 v.01

 

Пример «Почтовый ящик» (опционально)

task body Отправитель; begin

loop

. . .

ПочтовыйЯщик.Отправить(Послание);

. . .

end loop; end Отправитель;

task body Получатель; begin

loop

. . .

ПочтовыйЯщик.Принять(Послание);

. . .

end loop; end Получатель;

8. Задачи в АДА, механизм рандеву

 

10

Сидельников В.В. vvs_home@list.ru

2011 v.01