Если ваша запись больше 8 байт, то аппаратная поддержка атомарных операций отсутствует.В противном случае вы можете использовать приведение для достижения желаемого.Например, в вашем случае, когда запись содержит одно 32-разрядное целое число, вы можете сделать это следующим образом:
function AtomicExchange(var Target: TStatusCode; Value: TStatusCode): TStatusCode; inline; overload;
begin
Result := TStatusCode(System.AtomicExchange(PInteger(@Target)^, Integer(Value)));
end;
Обратите внимание, что запись должна быть выровнена, поскольку это требование относится к базовому AtomicExchange
. * 1005.*