Защищенный тип содержит данные, к которым задачи могут получить доступ только используя набор защищенных операций, определенных разработчиком. Существует три типа защищенных операций:
Защищенные типы очень эффективны, поскольку для их реализации обычно не требуется таких "тяжеловесных" операций, как "полное переключение контекста". Защищенные типы часто реализуют с помощью таких механизмов как запрет прерываний, ограничение уровня приоритетов или с помощью спин-блокировок. Фактически, применение защищенных типы часто может быть более эффективным, чем непосредственное использование семафоров, что может показаться удивительным. Если Вам любопытно, почему защищенные типы могут быть настолько эффективны, можете посмотреть Ada Rationale (Часть 2, раздел 9.1.3) Впрочем, это также значит, что все защищенные операции должны быть короткими и быстрыми, а длительная обработка должна выполняться где-то в другом месте. Обычно защищенные операции выполняют такие действия как инкремент или декремент величины, установка флага, установка одного-двух ссылочных значений и другие подобные быстрые операции. Длительные операции могут увеличить максимальную латентность системы (время реакции системы на новую ситуацию), что для многих систем может быть нежелательно.
Защищенный тип может быть создан в виде единственного экземпляра (т.е. одной защищенной переменной) или в виде полноценного типа Ada. В последнем случае с защищенным объектом можно выполнять все те же действия, что и с объектом обычного типа, включая размещение защищенных объектов в записях или массивах.
Допустим, мы создаем защищенный тип и хотим создать операцию, которая изменяет данные внутри него. Эта операция может выполняться всегда, то есть для ее выполнения нет необходимости ожидания выполнения определенных условий. Как должна быть описана эта защищенная операция?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 13 |
---|
Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s13s3.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org