Справочник по Ada 95
Раздел 9: Задачи и синхронизация
Выполнение программы на языке Ada состоит из выполнения одной или нескольких задач. Каждая задача представляет собой отдельный поток управления, который выполняется независимо и параллельно между точками, где он взаимодействует с другими задачами. Различные формы взаимодействия задач описаны в этом разделе и включают:
- активацию и завершение задачи;
- вызов защищенной подпрограммы защищенного объекта, обеспечивающего эксклюзивный доступ для чтения-записи или одновременный доступ только для чтения к общим данным;
- вызов входа, либо другой задачи, что позволяет обеспечить синхронное взаимодействие с этой задачей, либо защищенного объекта, что позволяет обеспечить асинхронное взаимодействие с одной или несколькими другими задачами, использующими этот же защищенный объект;
- определённую во времени операцию, включая простое утверждение отложенного выполнения, вызов входа или прием во времени, или утверждение асинхронного выбора во времени (см. следующий пункт);
- асинхронную передачу управления в рамках асинхронного утверждения выбора, где задача приостанавливает текущее выполнение и начинает выполнение в другой точке в ответ на завершение вызова входа или истечение времени отложенного выполнения;
- утверждение прерывания, позволяющее одной задаче вызвать завершение другой задачи.
Кроме того, задачи могут взаимодействовать косвенно, считывая и обновляя (без защиты) общие переменные, предполагая, что доступ должным образом синхронизирован посредством другого типа взаимодействия задач.
Статическая семантика
Свойства задачи определяются соответствующим объявлением задачи и task_body, которые вместе определяют программную единицу, называемую единицей задачи.
Динамическая семантика
Со временем задачи проходят через различные состояния. Задача изначально неактивна; после активации и до её завершения она либо заблокирована (в рамках какого-либо взаимодействия задач), либо готовa к запуску. В готовом состоянии задача конкурирует за доступные ресурсы выполнения, необходимые для её запуска.
ПРИМЕЧАНИЯ
1 Параллельное выполнение задач может быть реализовано на многопроцессорных системах или с чередующимся выполнением на одном физическом процессоре. С другой стороны, всякий раз, когда реализация может определить, что требуемые семантические эффекты могут быть достигнуты, когда части выполнения данной задачи выполняются различными физическими процессорами, действующими параллельно, она может выбрать выполнение их таким образом.