AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Implementierung TSingleton für thread-safety (z.B. Spring4D)

Implementierung TSingleton für thread-safety (z.B. Spring4D)

Ein Thema von Rollo62 · begonnen am 9. Apr 2020 · letzter Beitrag vom 14. Apr 2020
 
Rollo62

Registriert seit: 15. Mär 2007
4.164 Beiträge
 
Delphi 12 Athens
 
#1

Implementierung TSingleton für thread-safety (z.B. Spring4D)

  Alt 9. Apr 2020, 12:20
Hallo zusammen,

ich beschäftige mich gerade mit Singletons, und es wird üblicherweise das Erzeugen mit CS abgesichert,
so wie hier in Spring4D

Delphi-Quellcode:
class function TSingleton.GetInstance<T>: T;
begin
  if not Assigned(TSingleton<T>.fInstance) then
  begin
    fCriticalSection.Enter;
    try
      if not Assigned(TSingleton<T>.fInstance) then
        TSingleton<T>.fInstance := T.Create;
    finally
      fCriticalSection.Leave;
    end;
  end;
  Result := TSingleton<T>.fInstance;
end;
Die eigentliche zu kapselnde Klasse <T> muss aber auch threadsicher sein, wenn da mehrere Threads global drauf zugreifen können.

Ich frage mich ob man dafür in einfachen Fällen nicht die bereits bestehende Instanz von fCriticalSection nehmen könnte / sollte.

So sparte man zumindest unnötige CS-Ressourcen in der zu kapselnden Klasse ein.
Das entspräche womöglich nicht einer optimalen Trennung der "Concerns", aber
könnte doch die Ressourcen und Performance optimieren.

Die zu kapselnde Klasse könnte für den Fall von einer speziellen Klasse abgeleitet sein,
z.B. type T = class; für alle nicht sicheren Fälle wie bisher, type T = class(TSingletonThreadsafe);

Abhängig von dem Type der Klasse könnte dann die CS im Create( FCriticalSection ); übergeben werden.

Oder spricht etwas Grundsätzliches dagegen, und es gäbe es sinnvollere Möglichkeiten
das Konstrukt threadsafe zu machen ?

Geändert von Rollo62 ( 9. Apr 2020 um 12:22 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz