InterlockedExchangeAdd()
「値に値の原子の添加を行うには、加数によって指される。結果は、加数で指定されたアドレスに格納されています。」相互に整数値をインクリメント
:
System.SyncObjs
ユニットが同じことを行うためにAdd()
方法をオーバーロードしているTInterlocked
クラスを有しています。
オーバーロードされたAdd
のメソッドが2つあります。両方のAdd
メソッドは、Target
を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;
違いはInterlockedExchangeAdd()
あるTInterlocked.Add()
代わりに「インクリメントパラメータの値を返す」に対し、「変数の初期値が加算によって指さ戻り」。だから、あなたは戻り値を使用している場合、あなたはその違いを考慮する必要があります、例えば:
function InterlockedExchangeAdd(var Addend: Integer; Value: Integer): Integer;
begin
Result := TInterlocked.Add(Addend, Value) - Value;
end;
http://stackoverflow.com/q/2287451/505088 –