Параллелизм встроен в язык, поэтому у вас есть специальный синтаксис Ada для задач (т. Е. Потоков) и защищенных объектов (т. Е. Более мощных, чем семафоры / мьютексы / условные переменные).Это делает намного проще (и менее подверженным ошибкам) программирование многопоточных приложений в Ada, чем в других языках, таких как C / Java.
Не рекомендуется использовать семафоры в Ada, защищенные объекты гораздо более мощные (но выможет легко создавать семафоры, используя защищенные объекты при необходимости).
Несколько небольших примеров синтаксиса.Задачи (и защищенные объекты) могут быть статическими ...
task My_Task;
task body My_Task is
begin
-- Just print this to stdout and exit thread
Ada.Text_IO.Put_Line("Hello, concurrent World!");
end;
... или создаваться динамически
task type My_Task_Type(N : Natural);
task body My_Task_Type(N : Natural) is ...
...
T1 := new My_Task_Type(100);
abort T1;
Гораздо менее многословно, чем в других языках (и более поддерживаемо)!См. Ключевые слова «new» и «abort» для управления динамическими задачами, а также другие специализированные пакеты, такие как Ada.Synchronous_Task_Control.