Особенности программирования защищенных входов и подпрограмм
Особенности программирования защищенных входов и подпрограмм
При программировании действий, выполняемых в телах защищенных входов и подпрограмм, следует учитывать, что время выполнения кода внутри защищенного объекта должно быть настолько кратким, насколько это возможно.Это вызвано тем, что пока выполняется этот код, выполнение других задач, которые пытаются получить доступ к данным защищенного объекта, будет задержано.Ада не позволяет принудительно ограничивать максимальную продолжительность выполнения кода во время защищенных действий, хотя и пытается убедиться в том, что задача не будет заблокирована в состоянии бесконечного ожидания доступа к защищенной процедуре или функции.Потенциальными причинами возникновения подобных ситуаций могут быть попытки выполнения (внутри защищенных действий):
- инструкции отбора (select)
- инструкции принятия (accept)
- инструкции вызова входа
- инструкции задержки выполнения
- создание или активация задачи
Перечисленные действия называют потенциально блокирующими.Кроме того, обращение к любому потенциально блокирующему действию
является также потенциально блокирующим.
Напомним, что при выполнении вызова защищенного входа в процессе обработки вызова защищенной процедуры или защищенного входа осуществляется проверка барьера.Если барьер закрыт (условие барьера имеет значение False), то вызов ставится в очередь.После завершения выполнения тела защищенной процедуры или защищенного входа значения всех барьеров вычисляются заново и, возможно, происходит выполнение тела входа.Вычисление значения барьера для входа и постановка вызова входа в очередь являются защищенными операциями ассоциированного с ними защищенного объекта, и они могут быть названы защищенными действиями.
Любое исключение, возбужденное в процессе вычисления значения барьера для входа, приводит к возбуждению исключения Program_Error во всех задачах, которые в текущий момент находятся в очереди ожидания обслуживания вызова входа защищенного объекта.