Руководство по Ada (Ada 2022)
C.6.3 Пакет System.Atomic_Operations.Test_and_Set
Определяемый языком пакет System.Atomic_Operations.Test_And_Set предоставляет операцию для атомарного установки и сброса объекта атомарного флага.
Статическая семантика
Библиотечный пакет System.Atomic_Operations.Test_And_Set имеет следующее объявление:
package System.Atomic_Operations.Test_And_Set
with Pure, Nonblocking is
with Pure, Nonblocking is
type Test_And_Set_Flag is mod определяемое реализацией
with Atomic, Default_Value => 0, Size => определяемое реализацией;
with Atomic, Default_Value => 0, Size => определяемое реализацией;
function Atomic_Test_And_Set
(Item : aliased in out Test_And_Set_Flag) return Boolean
with Convention => Intrinsic;
(Item : aliased in out Test_And_Set_Flag) return Boolean
with Convention => Intrinsic;
procedure Atomic_Clear
(Item : aliased in out Test_And_Set_Flag)
with Convention => Intrinsic;
(Item : aliased in out Test_And_Set_Flag)
with Convention => Intrinsic;
function Is_Lock_Free
(Item : aliased Test_And_Set_Flag) return Boolean
with Convention => Intrinsic;
(Item : aliased Test_And_Set_Flag) return Boolean
with Convention => Intrinsic;
end System.Atomic_Operations.Test_And_Set;
Test_And_Set_Flag представляет состояние объекта атомарного флага. Объект атомарного флага может считаться установленным или сброшенным.
Atomic_Test_And_Set выполняет атомную операцию установки и проверки на Item. Item устанавливается на какое-то определённое реализацией ненулевое значение. Функция возвращает True, если предыдущее содержимое было ненулевым, и False в противном случае.
Atomic_Clear выполняет атомную операцию сброса на Item. После операции Item содержит 0. Этот вызов следует использовать совместно с Atomic_Test_And_Set.