Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
26. Nov 2011
Das mit den 2 Threads, die die gleiche Objekt-Instanz erzeugen, war als Antwort auf himitsu's Anmerkung, dass die Erzeugung der CS-Instanz nicht Thread-Safe ist und ich damit eigentlich nur aufzeigen wollte, dass dieser Fall nur in der Theorie vorkommen kann.
Der Schutz des Konstruktors wird dann wichtig, wenn man z.B. eine Klasse erzeugt, die z.B. einen Thread-Pool erstellt und diesem...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
26. Nov 2011
Gut vielleicht hätte ich schreiben sollen "könnte" - ich gehe aber immer davon aus, dass es knallt und
gerade das kann ich damit ja verhindern ...
Was ist der Unterschied? Ein TThread ist auch einfach nur ein Objekt ...
Benutze ich hier aber beispielhaft um das zu erläutern, denn Thread-Safe benötige ich ja nur im Zusammenhang mit Threads.
Aber welches Objekt man auf die skizzierte Art und...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
26. Nov 2011
Wenn ich in meiner Anwendung keine Threads benutze, dann kann ich mir das sparen - richtig.
Aber wenn ich Thread-Safe Objekte benötige, dann könnten auch die Konstruktoren Seiteneffekte haben, je nachdem was ich im Konstruktor mache.
z.B. könnte ich dort die Instanz an einen bestehen Thread übergeben
Wäre der Konstruktor also nicht geschützt, dann würde es sofort knallen, wenn ich mit dem...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by Sir Rufo,
26. Nov 2011
Der Einwand ist berechtigt, jedoch das Problem ist eher theoretisch, denn eine CS für eine Instanz sollte so implementiert werden:
constructor TMyThreadA.Create( CreateSuspended : Boolean );
begin
CS.Enter; // erster Aufruf für die neue Instanz
try
inherited; // ab jetzt gibt es eine Instanz
finally
CS.Leave;
end;