Инициирование задачи
Неявная инициализация:
begin
nill;
end Турист;
Багаж
Турист
Встреча
(!) Активны три задачи
task body A2 is
begin
. . .
accept R do (2)
<обработка входа>
end; (3)
. . .
end A;
Вызов входа:
Вход:
A1
t
t
ждет
A2
I
2
ждет
1
3
II
A1
t
t
A2
ждет
1
3
2
task body A1 is
begin
. . .
B.R;
. . .
end A;
task body An is
begin
. . .
B.R;
. . .
end A;
Спецификация задачи:
Тело задачи:
task body Преобразовать;
Y: CHARACTER;
begin
loop
accept R(P: in CHARACTER) do
Y:= P;
end;
Put(UPPER(Y));
end loop;
end;
begin
nill;
end.
Описание задачи, пример
task body Семафор;
begin
loop
accept P do end;
accept V do end;
end loop;
end Сигнал;
Реализация механизма семафоров
task body Сигнал;
begin
loop
accept Послать do end;
if Ждать’COUNT > 0 then
accept Ждать do end;
end if;
end loop;
end Сигнал;
Реализация механизма сигналов
ПочтовыйЯщик
Отправитель
Получатель
task body Отправитель;
begin
loop
. . .
ПочтовыйЯщик.Отправить(Послание);
. . .
end loop;
end Отправитель;
task body Получатель;
begin
loop
. . .
Почтовый_Ящик.Принять(Послание);
. . .
end loop;
end Получатель;
Задача очень похожа на «Поставщик-Потребитель»
Буфер рассчитан только одно сообщение и увеличивать его нет смысла так как :
Очень жесткий способ синхронизации :
Принять и Отправить выполняются по очереди,
Отбор среди входов, задача «Поставщик-Потребитель»
select
when (A) =>
accept X do
. . .
end;
or
when (B) =>
accept Y do
. . .
end;
end select;
Задача «Поставщик-Потребитель» (2)
Оператор Отбора среди входов
Отбираемой альтернативой может быть
ператор входа accept
оператор задержки
delay <выражение, указывающее величину задержки>
Отбор среди входов
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть