In einer Klasse, die von mehreren Threads verwendet wird, prüfe ich, ob ein dynamisches Array schon angefasst wurde und initialisiere es andernfalls.
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:
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.