3.1.2. Специфика структуры задачи в языке Ада

Удобно разбить все задачи в языке Ада на четыре класса, соответствующие четырем ранее описанным ролям. Каждая из ролей иллюстрируется примером на рис. 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.
назад оглавление вперед
Рейтинг ресурсов "Весь Екатеринбург"