Асинхронная передача управления
Продемонстрируем одну из интересных возможностей языка - прерывание исполнения кода по истечению времени или по принятию рандеву задачи. В данном примере бесконечный цикл с подсчетом итераций прерывается по истечении одной секунды. Хотя эта возможность предоставляется языком, пользоваться ею следует с осторожностью, т.к. после прерывания исполнения данные могут оказаться в рассогласованном состоянии.
with Ada.Text_IO;
with System;
procedure Asynch_Transfer is
type Modular_Type is mod 2 ** System.Word_Size;
N : Modular_Type := 0;
pragma Atomic (N);
begin
select
delay 1.0;
Ada.Text_IO.Put_Line (Modular_Type'Image (N));
then abort
loop
N := N + 1;
end loop;
end select;
Ada.Text_IO.Put_Line ("Done.");
end Asynch_Transfer;
|