Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Di 20.09.05 01:29 
In einer Klasse, die von mehreren Threads verwendet wird, prüfe ich, ob ein dynamisches Array schon angefasst wurde und initialisiere es andernfalls.

ausblenden Delphi-Quelltext
1:
if Dingens=NIL then InitDingens;					


Das Initialisieren ist durch eine CriticalSection geschützt, mit einer weiteren Prüfung auf NIL nach Betreten derselben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure InitDingens;
begin
 CritSec.Enter;
 
 try
 if Dingens=NIL then
 Initialisieren;

 finally
  CritSec.Leave;
 end;
end;


Meiner Meinung nach sollte das eigentlich gut gehen (scheint es auch - nach längeren Testlauf - das sagt jedoch bei Multithreading recht wenig aus), aber ich hätte gerne eine zweite Meinung. Natürlich könnte man alles in eine CS setzen, aber das kostet echt eine Menge Performanz.
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Di 20.09.05 09:19 
Bei Critial Sections musst du eigentlich nur darauf aufpassen, dass alle Threads die gleiche CS verwenden, um auf die Daten zuzugreifen.

Sprich, wenn du 3 Threads hast, die auf die eine Instanz deiner Klasse zugreifen, dann sollten die drei Threads auch nur 1 CS und nicht 3 unterschiedliche verwenden.

Irgendwo hier im Forum war das mal schön beschrieben.

Gruß

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Di 20.09.05 11:41 
Das ist schon klar: die CS ist ein Feld der Klasse.
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Di 20.09.05 11:44 
Dann sollte es eigentlich keine Probleme geben.

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Di 20.09.05 12:09 
Wie teuer sind die CS eigentlich, wenn man auf die Anzahl der Takte schaut? Ich hab glaub ich mal was von 600 auf P3 gelesen.
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Di 20.09.05 12:13 
Oh darüber kann ich dir jetzt keine Auskunft geben, vielleicht findest du hierzu was in der MSDN Library

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean