9.1 спецификация задачиСпецификация задачи (task) задаёт имя задачи и содержит описания входов задачи и спецификаторов представления: TASK [TYPE] Идентификатор_задачи [ Дискретный диапазон] IS - - Описание Входов
83 Глава 9. Задачи - - Спецификатор_Представления - - Описание_Входов - - Спецификатор представления ] END Идентификатор _задачи; О Примеры: task Metro ; - - задача с вырожденной спецификацией task Stack is entry Read (X: out Elem ); - - входы для приёма - - и передачи entry Write (Y: in Elem); - - информации от - - других задач private entry Get (Z: in integer); end Stack; задача имеет входы только для синхронизации - - спецификатор адреса task Semaphore is entry P; entry V; for P use at Spec_Address; end Semaphore; Наряду с описанием единичной задачи в Аде разрешается описание множества задач через использование задачного типа. О Например: task type Silk; - - заданный тип А, В : Silk ; - - создание двух одинаковых задач А и В типа Silk Тор : array (1 ..5) of Silk; - - создание массива задач Тор(1 . .5) Использование сылочного типа для создания задач типа Silk Глава 9. Задачи 85 Ада 95. Введение в программирование 84
type Cotton is access Silk ; Event : Cotton : = new Silk ; Anchor : Cotton ; Задачный тип является лимитированным приватным типом, для которого запрещены все операции. В задачном типе в языке допускается использование дискримина-тов, что предоставляет дополнительные удобства при работе с задач-ным типом. Механизм дискриминантов позволяет параметризировать задачи при их описании. Например, с помощью дискриминанта можно идентифицировать (внутренне) задачи, создаваемые на основе задачно-го типа: task type Node( Name : Character ) ; - - задачный тип - - с дискриминантом создание задач Z1 Z2 Z3 Node( A); Node( В); Node( С); task body Node is - - тело задачного типа begin put( Name); case Name do A= > ... В = > ... - - обработка дискриминанта в теле задачи С = > ... end Node; Здесь созданы три одинаковые задачи Zl, Z2, Z3 , однако их поведение можно сделать разным за счет анализа в теле задачного типа дискриминанта Name , который у всех трех задач разный. С помощью дискриминанта задачи можно связывать с данными, встраивая задачи в данные, или данные, логически связанные задачами, размещать вне задач, используя ссылочный дискриминант. type Box is record Z: integer; X: integer; end record; task type Monterey ( Mr : access Box ); Теперь тип Box можно использовать в теле задачного типа Monterey. Ш СОВЕТЫ: * Используйте дискриминант для инициализации задач. * Используйте дискриминант для установления приоритета задачи, размера семейства входов, размера памяти, неодходимого для задачи. » Используйте дискрминант для указания данных, ассоциируемых с задачей. * Минимизируйте динамическое порождение задач. |
| Оглавление| |