Du musst das nicht synchronisieren, sondern nur zuverlässig gewährleisten, dass ein gleichzeitiger Zugriff nicht erfolgen kann. (z.B.
TCriticalSection)
Delphi-Quellcode:
unit Unit1;
interface
uses
System.Classes,
System.SyncObjs;
type
TValueStore =
class
private
FCS : TCriticalSection;
FValues : TStringList;
function GetValue(
const Name :
string ) :
string;
procedure SetValue(
const Name, Value :
string );
public
constructor Create;
destructor Destroy;
override;
property Value[
const Name :
string] :
string read GetValue
write SetValue;
end;
implementation
{ TValueStore }
constructor TValueStore.Create;
begin
inherited;
FCS := TCriticalSection.Create;
FValues := TStringList.Create;
end;
destructor TValueStore.Destroy;
begin
FValues.Free;
FCS.Free;
inherited;
end;
function TValueStore.GetValue(
const Name :
string ) :
string;
begin
FCS.Enter;
try
Result := FValues.Values[
Name];
finally
FCS.Leave;
end;
end;
procedure TValueStore.SetValue(
const Name, Value :
string );
begin
FCS.Enter;
try
FValues.Values[
Name] := Value;
finally
FCS.Leave;
end;
end;
end.
Diese Klasse ist nun
threadsafe, aber du musst auch aufpassen, dass der Zugriff auf die Instanz auch
threadsafe ist und nicht von irgendwoher da wild neue Instanzen angelegt/freigegeben werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)