Удобно разбить все задачи в языке Ада на четыре класса, соответствующие четырем ранее описанным ролям. Каждая из ролей иллюстрируется примером на рис. 2.5; ее фактическая форма поясняется ниже.
Как уже говорилось, задача любого типа может создавать и активизировать задачу любого типа. Например, задача Task_Master играет очень простую роль: эта задача порождает фиксированный набор других задач, ждет их завершения, а затем сама прекращает свою работу. При реализации этой простой схемы мы можем создать задачу Master_Server таким образом, что дочерние задачи будут создаваться либо статически, либо динамически (рис. 3.1).
with Text_I0, Membership_Roster, Roster_Types_And_Constants, Club_Portfolio, Stock, Туpes_ And_Constants; use Text_IO, Membership_Roster, Roster_Types_And_Constants, Club_Portfolio, Stock_Types_And_Constants; procedure Task_Master is -- Предполагается, что задача Task, Master не -- является ни запросчиком, ни обслуживателем. task type Member_Task; -- Это полная часть спецификации, предполагающая, -- что задача Member_Task является чистым -- запросчиком. member: array (1..20) of Member_Task; -- Порождается массив с именем Member из 20 задач. task body Member_Task is separate; --Заглушка. task Роrtfolio_Server is -- Здесь записываются объявления входов данной задачи. -- Подробности приводятся в приложениях Е и Ж. end Portfolio_Server; -- Порождение этой задачи завершается после зада- -- ния спецификации и части тела. task body Portfolio_Server is separate; -- Заглушка. task Roster_Server is -- Здесь приводятся объявления входов данной задачи. -- Подробности приводятся в приложениях Е и Ж end Roster_Server; -- Порождение этой задачи завершается после зада- -- ния данной спецификации и части тела. task body Roster_Server is separate; -- Заглушка. begin -- Здесь активизируются все 22 задачи. -- -- Здесь записываются операторы, описывающие действия -- Task _Master, если таковые имеются. -- end Task _Master; -- Ожидание завершения работы всех порожденных -- задач и затем завершение работы. Рис. 3.1. Возможная структура задачи Task_Master.