Разделы презентаций


Задачи языка Ада

11. Механизм рандеву 2002 v.0.2program Туристtask body Встреча is;begin . . . end Встреча; task body Багаж is;begin

Слайды и текст этой презентации

Слайд 111. Механизм рандеву

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

11. Механизм рандеву            2002 v.0.2Задачи (язык

Слайд 211. Механизм рандеву

2002 v.0.2
program Турист

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

. . .
end Встреча;

task body Багаж is;
begin
. . .
end Багаж;

begin
initiate(Встреча);
initiate(Багаж);
end Турист;

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

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

begin
nill;
end Турист;

Багаж

Турист

Встреча

(!) Активны три задачи

11. Механизм рандеву            2002 v.0.2program Туристtask

Слайд 311. Механизм рандеву

2002 v.0.2

Механизм рандеву
task body A1

is

begin
. . .
A2.R; (1)
. . .
end A;


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

11. Механизм рандеву            2002 v.0.2Механизм рандеву

Слайд 411. Механизм рандеву

2002 v.0.2
Взаимное исключение

task body

B is

begin
loop
accept R do
. . .
end;
end loop;
end A;


task body A1 is

begin
. . .
B.R;
. . .
end A;


task body An is

begin
. . .
B.R;
. . .
end A;



11. Механизм рандеву            2002 v.0.2Взаимное исключение

Слайд 511. Механизм рандеву

2002 v.0.2

Описание задачи

task is

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


task body is <имя_задачи>
<описание_данных>
begin
<описание_действий>
accept <имя входа> [(<формальные параметры>)] do
<описание_действий_входа>
end;
<описание_действий>
end <имя_задачи>;

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

Тело задачи:

11. Механизм рандеву            2002 v.0.2Описание задачиtask

Слайд 611. Механизм рандеву

2002 v.0.2
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.

Описание задачи, пример

11. Механизм рандеву            2002 v.0.2program Преобразование_символа;task

Слайд 711. Механизм рандеву

2002 v.0.2




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

.
Семафор.P;
КритическаяСекция_1;
Семафор.V;
. . .
end;

task body Процесс_2;
begin
. . .
Семафор.P;
КритическаяСекция_2;
Семафор.V;
. . .
end;

task body Семафор;
begin
loop
accept P do end;
accept V do end;
end loop;
end Сигнал;

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

11. Механизм рандеву            2002 v.0.2task body

Слайд 811. Механизм рандеву

2002 v.0.2




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 Сигнал;

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

11. Механизм рандеву            2002 v.0.2task body

Слайд 911. Механизм рандеву

2002 v.0.2
Пример – «Почтовый ящик»
task

body ПочтовыйЯщик;
Буфер: СООБЩЕНИЕ;
begin
loop
accept Отправить(Передача: in СООБЩЕНИЕ) do
Буфер:= Передача;
end;
accept Принять(Прием: out СООБЩЕНИЕ) do
Прием:= Буфер;
end;
end loop;
end Почтовый_Ящик;

ПочтовыйЯщик

Отправитель

Получатель



11. Механизм рандеву            2002 v.0.2Пример –

Слайд 1011. Механизм рандеву

2002 v.0.2
Пример – «Почтовый ящик» (2)


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



task body Получатель;
begin
loop
. . .
Почтовый_Ящик.Принять(Послание);
. . .
end loop;
end Получатель;

11. Механизм рандеву            2002 v.0.2Пример –

Слайд 1111. Механизм рандеву

2002 v.0.2
Пример – «Почтовый ящик» (3)


Задача очень похожа на «Поставщик-Потребитель»
Буфер рассчитан только одно сообщение и увеличивать его нет смысла так как :
Очень жесткий способ синхронизации :
Принять и Отправить выполняются по очереди,

11. Механизм рандеву            2002 v.0.2Пример –

Слайд 1211. Механизм рандеву

2002 v.0.2
task body ПоставщикПотребитель;

Размер: constant INTEGER

= 20;
Буфер: array(1..Размер) of СООБЩЕНИЕ;
ТекущийЗапись, ТекущийЧтение: INTEGER = 1;
Количество: INTEGER = 0;

Отбор среди входов, задача «Поставщик-Потребитель»

select
when (A) =>
accept X do
. . .
end;
or
when (B) =>
accept Y do
. . .
end;
end select;

11. Механизм рандеву            2002 v.0.2task body

Слайд 1311. Механизм рандеву

2002 v.0.2
begin
loop
select

when (Количество < Размер) =>
accept Записать(X: in СООБЩЕНИЕ) do
Буфер(ТекущийЗапись):= X;
end;
Текущий:= (ТекущийЗапись + 1) mod Размер;
Количество:= Количество + 1;
or
when (Количество > 0) =>
accept Прочитать(Y: out СООБЩЕНИЕ) do
Y:= Буфер(ТекущийЧтение);
end;
Текущий:= (ТекущийЧтение + 1) mod Размер;
Количество:= Количество - 1;
end select;
end loop;
end ПоставщикПотребитель;

Задача «Поставщик-Потребитель» (2)

11. Механизм рандеву            2002 v.0.2begin loop

Слайд 1411. Механизм рандеву

2002 v.0.2
select
[when =>]

[последовательность операторов]
{or
[when

<условие>=>]
<отбираемая альтернатива>
[последовательность операторов]}
[else
последовательность операторов]
end select;

Оператор Отбора среди входов

Отбираемой альтернативой может быть
ператор входа accept
оператор задержки
delay <выражение, указывающее величину задержки>

11. Механизм рандеву            2002 v.0.2select	[when =>]		[последовательность

Слайд 1511. Механизм рандеву

2002 v.0.2
Открытый вход – вход,

у которого условие входа в данный момент является истинным

Если нет ни открытых операторов задержки, ни фразы else, задача будет неопределенно долго ждать вызова входа, связанного с открытым оператором входа accept и обработает первый поступивший вызов

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

Если нет ни открытых альтернатив, ни фразы else, возникает исключительная ситуация SELECT_ERROR
 
Если нет открытого оператора задержки, но есть фраза else, то задача немедленно приступит к выполнению части else.

Отбор среди входов

11. Механизм рандеву            2002 v.0.2 Открытый

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика