Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CS vs Lightweight-MREW vs LeightweightMREW_EX (https://www.delphipraxis.net/214848-cs-vs-lightweight-mrew-vs-leightweightmrew_ex.html)

QuickAndDirty 19. Mär 2024 12:21

CS vs Lightweight-MREW vs LeightweightMREW_EX
 
Ich möchte in eienm Client eine Resource(Informationen über den Server) Zeitlich begrenzt global cachen.
Es wird viele Lesezugriffe aus anderen Threads, aber nur sehr sehr selten Schreibzugriffe aus anderen Threads geben.

Wie verhält es sich mit der Geschwindigkeit von zu
Delphi-Quellcode:
System.SyncObjs.TCriticalSection
System.SyncObjs.TLightweightMREW
TLightweightMREWEx //https://github.com/gabr42/examples/blob/master/Reader-writer%20lock/LightweightMREWEx.pas
zueinander

Besteht das Deadlock Problem bei Double BeginWrite noch für TLightweightMREW ?

himitsu 19. Mär 2024 13:27

AW: CS vs Lightweight-MREW vs LeightweightMREW_EX
 
Es gibt auch im Delphi seit Jahrzehnten einen Delphi-Referenz durchsuchenTMREWSync / TMultiReadExclusiveWriteSynchronizer.
Geschwindgkeit kann ich nicht sagen, aber natürlich ist das bissl langsamer.

So ist oftmals die CriticalSection auch bissl langsamer, als t.B. das TMonitor (aus der System-Unit, nicht zu verwechseln mit TMonitor der VCL)
Wobei die CriticalSection aber auch andere Vorteile hat, z.B. schreibt sie ins Log und man kann live oder nachträglich analysen drüber auswerten.


Beim Verschachteln muß man aber echt aufpassen, dass man sich keinen Deadlock einbaut.

Innerhalb einer Schreitsperre eine neue Lesesperre, ist kein Problem (so lange im selben Thread)
aber innerhalb einer Lesesperre noch eine Schreibsperre öffnen zu wollen, das gibt Probleme, wenn es nicht nur eine einzige Stelle gibt, die sowas macht, und sie auch nie mehrmals gleichzeitig ausgeführt werden tut.

QuickAndDirty 19. Mär 2024 13:46

AW: CS vs Lightweight-MREW vs LeightweightMREW_EX
 
TMREWSYNC ist sehr aufwändig.
LeightweightMREW verwendet die Betriebsystem-Umsetzung. soll sehr schnell sein, angeblich vor allem für kurze locks weil es spinlocks verwendet.
Habe mir das jetzt genau angesehen... also es ist immernoch deadlock gefährdet... also werde ich wohl die version verwendeten die nen Wrapper dafür darstellt der Deadlocks verhindert.

Rollo62 19. Mär 2024 17:58

AW: CS vs Lightweight-MREW vs LeightweightMREW_EX
 
Achtung: TLightweightMREW unterstützt keine reentranten BeginWrites, es gibt aber eine Erweiterung hier
https://www.thedelphigeek.com/2021/0...511-46172.html
https://www.thedelphigeek.com/2020/1...2-impleme.html

QuickAndDirty 20. Mär 2024 10:40

AW: CS vs Lightweight-MREW vs LeightweightMREW_EX
 
Ja steht doch auch im Kommentar im Code im Eröffnungspost.

Rollo62 20. Mär 2024 11:47

AW: CS vs Lightweight-MREW vs LeightweightMREW_EX
 
Sorry, das muss an meiner Grünblindheit liegen. :pale: :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 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-2025 by Thomas Breitkreuz