Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
7. Jun 2017
Korrekt. Der TMultiReadExclusiveWriteSynchronizer ist für solche Szenarien besser geeignet, als TCriticalSection oder TMonitor. Solange jetzt n-Threads gleichzeitig NUR lesen, wirst du einen Performancevorteil feststellen können. Im Grunde stellt der TMultiReadExclusiveWriteSynchronizer jetzt nur noch sicher, dass erst alle lesenden Zugriffe abgeschlossen sind, bevor ein schreibender Zugriff...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
7. Jun 2017
Grob gesagt ist es auch hier "egal", was du verwendest. Je nach Anwendungszweck können sich höchstens leichte Performanceunterschiede ergeben, aber was "besser" oder "schlechter" ist, kann man pauschal nicht sagen. Es sind einfach zwei verschiedene Paradigmen als Lösung für das selbe Problem.
Statt deiner CS könntest du dir einfach eine dummy TObject Instanz erstellen und darauf dann...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
7. Jun 2017
Die Objektinstanz dient TMonitor nur als Marker. Oft hat man ja eine seperate Datenklasse, auf die die Threads dann zugreifen. Hier würde ich die Instanz dieser Klasse verwenden, aber im Grunde ist es komplett egal, welches Objekt du verwendest.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
5. Mai 2017
Sofern sich da nichts geändert hat, dann leider nicht. Siehe z.b.:
https://www.delphitools.info/2013/06/06/tmonitor-vs-trtlcriticalsection/
Meines Wissens nach versucht die Windows Implementation der Critical Section mitlerweile auch erstmal ein SpinLock, bevor es dann den teuren Context-Switch in den Kernel gibt. Sollte also nun sogar noch performanter sein.