InterlockedExchangeAdd()
"thực hiện một sự bổ sung nguyên tử của Value với giá trị được trỏ đến bởi phụ chú. Kết quả được lưu trữ trong các địa chỉ theo quy định của phụ chú."
Đơn vị System.SyncObjs
có một lớp TInterlocked
, mà đã quá tải Add()
phương pháp để làm điều tương tự:
gia số một giá trị số nguyên với nhau.
Có hai phương thức quá tải Add
. Cả hai phương thức Add
đều tăng Target
bởi Increment
.
class function Add(var Target: Integer; Increment: Integer): Integer; overload; static; inline;
class function Add(var Target: Int64; Increment: Int64): Int64; overload; static; inline;
Sự khác biệt là InterlockedExchangeAdd()
"trả về giá trị ban đầu của biến được trỏ đến bởi phụ chú", trong khi TInterlocked.Add()
"trả về giá trị của tham số tăng lên" để thay thế. Vì vậy, nếu bạn sử dụng giá trị trả về, bạn sẽ phải giải thích cho sự khác biệt đó, ví dụ:
function InterlockedExchangeAdd(var Addend: Integer; Value: Integer): Integer;
begin
Result := TInterlocked.Add(Addend, Value) - Value;
end;
Nguồn
2017-04-22 17:13:44
http://stackoverflow.com/q/2287451/505088 –