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. Введение в программирование
|
| Оглавление| |