InterlockedExchangeAdd()
„wykonuje dodatkiem atomowy Wartość do wartości wskazywanej przez składnikiem sumy. Wynik jest przechowywany w adresie podanym przez składnikiem sumy”.
Jednostka System.SyncObjs
ma TInterlocked
klasę, która przeciążony Add()
metod, aby zrobić to samo:
przyrostach wartość całkowitą z innym.
Istnieją dwie przeciążone metody Add
. Obie metody Add
zwiększają się o Target
przez 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;
Różnica polega na tym, że InterlockedExchangeAdd()
„zwraca wartość początkową zmiennej wskazywanej przez składnikiem sumy”, natomiast TInterlocked.Add()
„zwraca wartość zwiększany parametru” zamiast. Tak więc, jeśli używasz wartości zwracanej, trzeba będzie wyjaśnić tę różnicę, np:
function InterlockedExchangeAdd(var Addend: Integer; Value: Integer): Integer;
begin
Result := TInterlocked.Add(Addend, Value) - Value;
end;
http://stackoverflow.com/q/2287451/505088 –