Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Multithread DLLs - gemeinsamer Speicher

  Alt 18. Apr 2014, 12:58
Du musst das nicht synchronisieren, sondern nur zuverlässig gewährleisten, dass ein gleichzeitiger Zugriff nicht erfolgen kann. (z.B. Delphi-Referenz durchsuchenTCriticalSection)

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)

Geändert von Sir Rufo (18. Apr 2014 um 13:07 Uhr)
  Mit Zitat antworten Zitat