Введение в программирование - Учебное пособие (Корочкин А. В.)

9.3 взаимодействие задач .механизм рандеву

Задачи при выполнении могут взаимодействовать. Взаимодействие задач в языке включает :

•   синхронизацию задач;

•   передачу информации между задачами.

Механизм взаимодействия задач построен на концепции последова­тельных взаимодействующих процессов ( Communication Sequential Processes - CSP), предложенной Хоаром Н. [ 15, 16 ]. Программа в рамках CSP - набор последовательных процессов (задач), выпол­няющихся параллельно. Взаимодействие процессов осуществляется с помощью операций ввода-вывода. Во время взаимодействия процессы могут обмениваться информацией, при этом взаимодействие - синхро­низованное, то есть обмен выполняется только тогда, когда каждый процесс достигает соотвествующего оператора ввода-вывода, в про­тивном случае процессы дожидаются друг друга ( блокируются ).

В Аде механизм CSP получил дальнейшее развитие и реализацию в виде механизма рандеву ( rendezvous mechanism).

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

1. Две задачи могут взаимодействовать тогда и только тогда, когда хотя бы в одной из них имеется описание входа ( entry).

2. Взаимодействие задач заключается в том, что одна задача вызыва­ет вход другой задачи, указывая имя задачи и входа вместе с фактическими параметрами.

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

Глава 9.  Задачи

4.  Если обе задачи (вызывающая и принимающая вызов ) одновремен­но выполняют действия, связанные с взаимодействием, то между ними устанавливается связь посредством рандеву.

5.  Если при выполнении взаимодействия, одна из задач начнет выпол­нять свои действия по уставновлению связи раньше другой ( вызы­вать или принимать вызов ), то эта задача простанавливается ( бло­кируется ) до тех пор, пока другая задача не начнет выполнять свои действия, необходимые для взаимодействия, таким образом задачи синхронизируют свои действия при взаимодействии.

6. Во время рандеву задачи выполняют действия, связанные с переда­чей ( приемом) данных, причем передача информации может вы­полняться в обеих направления ( обмен).

7. После завершения рандеву задачи продолжают свое выполнение.

8. Во время рандеву задачи могут не передавать информации, в этом случае рандеву используется только для синхронизации задач, хотя в общем случае рандеву объединяет и синхронизацию и передачу информации между задачами.

9. Механизм рандеву в Аде является ассиметричным , то есть задача, вызывающая вход другой задачи, должна знать и явно указывать имя вызваемой задачи. Задача, принимающая вызов своего входа, не должна знать ( и указывать ) имя обращающейся к ней задачи. Такая разновидность рандеву эффективна для организации взаимо­действия одной задачи с несколькими, например в модели Клиент-Сервер, когда задача Сервер может обслуживать любые задачи -Клиенты, не зная их имен.

10. Если несколько задач вызвали один и тот же вход некоторой зада­чи, то эти задачи приостанавливаются , становятся в очередь к дан­ному входу и будут обслуживаться вызванной задачей либо в по­рядке поступления вызовов, либо по приоритетам. После обслужи­вания вызова задача удаляется из очереди. Для каждого входа фор­мируется своя очередь. Задаче разрешается находиться только в од­ной очереди по вызову входа.

Реализация механизма рандеву в языке выполнена с использованием понятий описание входа ( entry ), оператор вызова входа и оператора приема (принятия) accept Дополнительные возможности программи­рования механизма рандеву обеспечивает использование оператора выбора ( select,), задержки ( delay), прекращения ( abort) и упорядочи­вания очереди ( requeue ).

п*

 

89

Глава 9.   Задачи

Ада 95. Введение в программирование