Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
8. Jan 2010
vermutlich deswegen?
94 ms - Inc (nicht threadsave)
281 ms - LOCK
359 ms - InterlockedExchangeAdd
1344 ms - EnterCriticalSection
1438 ms - TCriticalSection
uses Windows, SyncObjs;
type
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
8. Jan 2010
soll heißen es geht theoretisch, aber ich hab's jetzt nicht in Delphi getestet, ob es kompiliert oder ob was falsch geschrieben ist.
PS: die Compare-Operatoren kannst du genauso wie den Lese-Operator noch mit einbinden, da es ja auch nur Lesezugriffe sind.
und das "theoretisch" hieß,
daß es irgendwie geht, wenn man 'nen Umweg für LOCK MOV V, i einsetzt
und z.B. LOCK AND V, 0 und danach noch...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
8. Jan 2010
sowas könnte gehn
type
TThreadSafeInteger = record
private
Value: Integer;
public
class operator Implicit(a: TThreadSafeInteger): Integer;
procedure Put (i: Integer);
procedure Add (i: Integer);
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
8. Jan 2010
class operator TThreadSafeInteger.Add(a: TThreadSafeInteger; b: Integer): Integer;
begin
a.Value := a.Value + b; // sinnlos, da hier nur eine Kopie von a verändert wird
// und kein anderer darauf zugreifen kann
result := a.Value; // lesezugriff
end;
class operator TThreadSafeInteger.Subtract(a: TThreadSafeInteger; b: Integer): Integer;
begin
a.Value :=...