Spec-Zone.ru › Ada 2012
Руководство по Ada 2012

Управление общими переменными

Этот подраздел определяет аспекты представления, которые управляют использованием общих переменных.
Абзацы с 2 по 6 были перемещены в Приложение J, «Устаревшие функции».

Статическая семантика

Для объявления_объекта, объявления_компонента или полного_объявления_типа могут быть указаны следующие аспекты представления:
Атомарный
Тип аспекта Атомарный — логический.
Независимый
Тип аспекта Независимый — логический.
Летающий
Тип аспекта Летающий — логический.
Для полного_объявления_типа массива типа (включая анонимный тип объявления_объекта анонимного массива объекта), могут быть указаны следующие аспекты представления:
Атомарные_Компоненты

Тип аспекта Атомарные_Компоненты — логический.
Летающие_Компоненты

Тип аспекта Летающие_Компоненты — логический.
Для полного_объявления_типа (включая анонимный тип объявления_объекта анонимного массива объекта), может быть указан следующий аспект представления:
Независимые_Компоненты

Тип аспекта Независимые_Компоненты — логический.
Если любой из этих аспектов указан непосредственно, то определение_аспекта должно быть статическим выражением. Если не указано (включая наследование), каждый из этих аспектов равен False.
Атомарный тип — это тип, для которого аспект Атомарный равен True. Атомарный объект (включая компонент) — это объект, для которого аспект Атомарный равен True, или компонент массива, для которого аспект Атомарные_Компоненты равен True для ассоциированного типа, или любой объект атомарного типа, кроме объектов, полученных вычислением среза.
Летающий тип — это тип, для которого аспект Летающий равен True. Летающий объект (включая компонент) — это объект, для которого аспект Летающий равен True, или компонент массива, для которого аспект Летающие_Компоненты равен True для ассоциированного типа, или любой объект летающего типа. Кроме того, каждый атомарный тип или объект также определяется как летающий. Наконец, если объект является летающим, то все его подкомпоненты также являются летающими (это не относится к атомарному).
Когда True, аспекты Независимый и Независимые_Компоненты указывают как независимо адресуемые указанный объект или компонент(ы), или, в случае типа, все объекты или компоненты этого типа. Все атомарные объекты и объекты с ссылками считаются указанными как независимо адресуемые.
Абзац 9 был перемещен в Приложение J, «Устаревшие функции».

Правила легальности

Если аспект Независимые_Компоненты указан для полного_объявления_типа, объявление должно быть типом массива или записи.
Незаконно указывать любой из аспектов Атомарный или Атомарные_Компоненты со значением True для объекта или типа, если реализация не может поддерживать неделимые и независимые чтение и обновление, необходимые аспектом (см. ниже).
Незаконно указывать атрибут Размер атомарного объекта, атрибут Component_Size для массива типа с атомарными компонентами или атрибуты расположения атомарного компонента таким образом, чтобы предотвратить выполнение реализацией необходимых неделимых и независимых чтения и обновлений.
Если атомарный объект передается в качестве параметра, то формальный параметр должен иметь атомарный тип или допускать передачу по значению. Если атомарный объект используется в качестве фактического значения для обобщенного формального объекта режима in out, то тип обобщенного формального объекта должен быть атомарным. Если префикс ссылка_на_атрибут для атрибута Access обозначает атомарный объект (включая компонент), то целевой тип полученного типа доступа должен быть атомарным. Если атомарный тип используется в качестве фактического значения для обобщенного формального типа производного типа, то предшественник формального типа должен быть атомарным. Соответствующие правила применяются к летающим объектам и типам.
Если летающий тип используется в качестве фактического значения для обобщенного формального массива типа, то тип элемента формального типа должен быть летающим.
Если аспект Летающий, Летающие_Компоненты, Атомарный или Атомарные_Компоненты непосредственно указан со значением True для автономного константного объекта, то аспект Импорт также должен быть указан как True для него.
Незаконно указывать аспект Независимый или Независимые_Компоненты как True для компонента, объекта или типа, если реализация не может предоставить независимую адресуемость, необходимую аспектом (см. 9.10).
Незаконно указывать аспект представления для компонента, объекта или типа, для которого аспект Независимый или Независимые_Компоненты равен True, таким образом, чтобы предотвратить выполнение реализацией независимой адресуемости, необходимой аспектом.
Абзац 14 был перемещен в Приложение J, «Устаревшие функции».

Динамическая семантика

Для атомарного объекта (включая атомарный компонент) все чтение и обновление объекта в целом неделимы.
Все задачи программы (на всех процессорах), которые читают или обновляют переменные volatile, видят один и тот же порядок обновлений переменных. Может потребоваться использование атомарной переменной или другого механизма, чтобы избежать ошибочного выполнения и обеспечить последовательное доступ к неатомарным летающим переменным (см. 9.10).
Два действия последовательны (см. 9.10), если каждое из них является чтением или обновлением одного и того же атомарного объекта.
Если тип атомарный или летающий и не является типом по значению, то тип определяется как тип по ссылке. Если любой подкомпонент типа является атомарным или летающим, то тип определяется как тип по ссылке.
Если фактический параметр является атомарным или летающим, а соответствующий формальный параметр — нет, то параметр передается по значению.

Требования к реализации

Внешний эффект программы (см. 1.1.3) определяется как включающий каждое чтение и обновление летающего или атомарного объекта. Реализация не должна генерировать никаких чтений или обновлений памяти атомарных или летающих объектов, кроме указанных программой.
Этот абзац был удален.

Рекомендации по реализации

Загрузка или сохранение летающего объекта, размер которого кратен System.Storage_Unit, а выравнивание которого отлично от нуля, должны реализовываться путем доступа точно к битам объекта и ни к каким другим.
Загрузка или сохранение атомарного объекта должны, по возможности, реализовываться с помощью одной инструкции загрузки или сохранения.
ПРИМЕЧАНИЯ
9 Импортированная volatile или атомарная константа ведет себя как константа (т. е. только для чтения) по отношению к другим частям программы Ada, но все же может быть изменена «внешним источником».
10 Указание аспекта Упаковки не может переопределить эффект указания аспектов Атомарный или Атомарные_Компоненты.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API