Hmm..
Der Zugriff erfolgt vergleichbar einer TCriticalSection.
Beispiel:
Delphi-Quellcode:
unit Unit2;
interface
uses
SysUtils;
function LeseDaten :
string;
procedure SchreibeDaten(Value :
string);
implementation
var
MSync_Global : TMultiReadExclusiveWriteSynchronizer;
Daten_Test :
string;
function LeseDaten :
string;
begin
MSync_Global.BeginRead;
try
Result := Daten_Test;
finally
MSync_Global.EndRead;
end;
end;
procedure SchreibeDaten(Value :
string);
begin
MSync_Global.BeginWrite;
try
Daten_Test := Value;
finally
MSync_Global.EndWrite;
end;
end;
initialization
MSync_Global := TMultiReadExclusiveWriteSynchronizer.Create;
finalization
MSync_Global.Free;
end.
Alle Threads (auch der Main..) nutzen nun einfach
function LeseDaten : string;
procedure SchreibeDaten(Value : string);
für den Zugriff auf 'Daten_Test : string;'.
Durch die Verwendung des globalen 'MSync_Global : TMultiReadExclusiveWriteSynchronizer;' innerhalb der Funktionen ist der Zugriff Threadsave..
(Einfach nur mal so Runtergeschrieben als minimales Beispiel
)
(Fehler und Irtümer nicht ausgeschlossen
)