Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Thread-Sicherheit durch Thread-Safe-Liste gegeben?

  Alt 19. Apr 2011, 22:57
Habe da im Moment eine Frage, bei der ich nicht so recht weiß, ob das Thread-Safe ist oder nicht. Ich habe eine eigens erstellte Thread-sichere Klasse TApLogThreadedBuffer<T: class>, von der eine Instanz in einer anderen Klasse gekapselt wird.
Delphi-Quellcode:
TApLogErrorHandler = class(TApThreadedObject)
  FItems : TApLogThreadedBuffer<TApLogErrorMessage>;
  ...
Nun gibts da auch die folgende Methode:
Delphi-Quellcode:
function TApLogErrorHandler.GetErrorCount(): Integer;
begin
  Lock();
  try
    Result := FItems.Count;
  finally
    Unlock();
  end;
end;
Nachdem hinter dem Aufruf von FItems.Count ja eh schon eine Thread-sichere Getter-Methode steckt könnte ich doch an dieser Stelle auf Lock() und Unlock() verzichten, oder?

PS: Lock() und Unlock() in der gezeigten Methode ruft eine andere CriticalSection auf, als die der FItems-Instanz. Wollte das nur noch geklärt haben

-- Edit: Noch ein kleiner Nachtrag: Trifft das gleiche dann auch hier zu? (hier nun ohne Lock() und Unlock())
Delphi-Quellcode:
function TApLogErrorHandler.GetItem(Index: Integer): TApLogErrorMessage;
begin
  Result := FItems[Index];
end;

function TApLogErrorHandler.GetMaxBufferElements(): Integer;
begin
  Result := FItems.MaxElements;
end;

procedure TApLogErrorHandler.SetMaxBufferElements(Value: Integer);
begin
  FItems.MaxElements := Value;
end;
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (19. Apr 2011 um 23:00 Uhr)
  Mit Zitat antworten Zitat