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