Registriert seit: 23. Mai 2005
312 Beiträge
|
Interlocked* mit Operator Überladung
8. Jan 2010, 16:04
Hallo,
ist das Ganze so Threadsafe, oder koennte es Probleme geben?
Delphi-Quellcode:
type
TThreadSafeInteger = record
private
Value: Integer;
public
class operator Add(a: TThreadSafeInteger; b: Integer): Integer;
class operator Subtract(a: TThreadSafeInteger; b: Integer): Integer;
class operator Implicit(a: TThreadSafeInteger): Integer;
class operator Implicit(a: Integer): TThreadSafeInteger;
class operator Explicit(a: TThreadSafeInteger): Integer;
class operator Explicit(a: Integer): TThreadSafeInteger;
end;
implementation
{ TThreadSafeInteger }
class operator TThreadSafeInteger.Add(a: TThreadSafeInteger; b: Integer): Integer;
begin
InterlockedExchangeAdd(a.Value, b);
InterlockedExchange(result, a.Value);
end;
class operator TThreadSafeInteger.Subtract(a: TThreadSafeInteger; b: Integer): Integer;
begin
InterlockedExchangeAdd(a.Value, -b);
InterlockedExchange(result, a.Value);
end;
class operator TThreadSafeInteger.Explicit(a: TThreadSafeInteger): Integer;
begin
InterlockedExchange(result, a.Value);
end;
class operator TThreadSafeInteger.Implicit(a: TThreadSafeInteger): Integer;
begin
InterlockedExchange(result, a.Value);
end;
class operator TThreadSafeInteger.Explicit(a: Integer): TThreadSafeInteger;
begin
InterlockedExchange(result.Value, a);
end;
class operator TThreadSafeInteger.Implicit(a: Integer): TThreadSafeInteger;
begin
InterlockedExchange(result.Value, a);
end;
Grüße, Win32.API
|
|
Zitat
|