Spec-Zone.ru › Ada 95
Справочник Ada 95

9.10 Общие переменные

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

Если два разных объекта, включая неперекрывающиеся части одного объекта, независимо адресуемы, они могут быть одновременно обработаны двумя разными задачами без синхронизации. Обычно любые два неперекрывающихся объекта независимо адресуемы. Однако, если для данного составного объекта задано упаковывание, расположение записей или Component_Size, то определяется реализацией, являются ли две неперекрывающиеся части этого составного объекта независимо адресуемыми.

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

Отдельные задачи обычно выполняются независимо и параллельно друг другу. Однако взаимодействия задач могут использоваться для синхронизации действий двух или более задач, чтобы, например, обеспечить осмысленную коммуникацию посредством прямого обновления и чтения переменных, общих для задач. Действия двух разных задач синхронизируются в этом смысле, когда действие одной задачи сигнализирует действие другой задачи; действие A1 определено как сигнализирующее действию A2 в следующих случаях:
  • Если A1 и A2 являются частью выполнения одной задачи, и правила языка требуют, чтобы A1 выполнялось до A2;
  • Если A1 является действием активатора, который инициирует активацию задачи, а A2 является частью выполнения активированной задачи;
  • Если A1 является частью активации задачи, а A2 является действием ожидания завершения активации;
  • Если A1 является частью выполнения задачи, а A2 является действием ожидания завершения задачи;
  • Если A1 является завершением задачи T, а A2 является либо вычислением выражения T'Terminated, либо вызовом Ada.Task_Identification.Is_Terminated с фактическим параметром, идентифицирующим T (см. C.7.1);
  • Если A1 является действием выдачи вызова входа, а A2 является частью соответствующего выполнения соответствующего entry_body или accept_statement.
  • Если A1 является частью выполнения accept_statement или entry_body, а A2 является действием возвращения из соответствующего вызова входа;
  • Если A1 является частью выполнения тела защищённой процедуры или entry_body для данного защищённого объекта, а A2 является частью последующего выполнения entry_body для того же защищённого объекта;
  • Если A1 сигнализирует какое-либо действие, которое в свою очередь сигнализирует A2.

Ошибка выполнения

При заданном действии присваивания объекту и действии чтения или обновления части этого же объекта (или соседнего объекта, если оба не независимо адресуемы), выполнение действий является ошибочным, если действия не последовательны. Два действия являются последовательными, если выполняется одно из следующего:
  • Одно действие сигнализирует другое;
  • Оба действия выполняются как часть выполнения одной задачи;
  • Оба действия выполняются как часть защищённых действий над одним защищённым объектом, и не более одного из действий является частью вызова защищённой функции защищённого объекта.
Pragma Atomic или Atomic_Components также могут использоваться для обеспечения последовательности определённых чтений и обновлений — см. C.6.


Spec-Zone.ru

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