Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
8. Jan 2022
Das geht auch nur solange gut, bis der generische Ringbuffer mit Managed Types verwendet wird. Dann muss beim Entfernen eventuell schon was mit den alten Daten passieren (z.B. Interfaces auf nil setzen). Das bedeutet manchmal eben auch Schreibzugriffe auf den Bufferspeicher zusätzlich zu den Pointern mit allem was es bei Multithreading dabei zu beachten gibt. Generics sind halt nicht trivial und...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
4. Jan 2022
Das ist ja eben das Problem bei lock-free Ansätzen... :)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
3. Jan 2022
Push und Pop sind aber immer schreibende Zugriffe. Insofern sehe ich jetzt noch nicht den Vorteil eines MREW.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
3. Jan 2022
Ich habe das nochmal etwas verallgemeinert, da der Wrapper ja gar nichts über die zu wrappende Instanz wissen muss. Damit kann das als Wrapper für quasi jede Objekt-Instanz herhalten und man bekommt über LockInstance auch gleich den tatsachlich übergebenen Typ zurück mit allen dort verfügbaren Methoden und Eigenschaften.
type
TThreadWrapper<T: class> = class
private
FLock: TObject;...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
3. Jan 2022
Jetzt alle relevanten Methoden in Enter/Leave zu klammern halte ich für wenig hilfreich, denn das sind in non-threadsafe Fall immer zwei überflüssige Calls. Davon abgesehen wird das in einigen Fällen auch nicht reichen, z.B. wenn man erwartet, dass ein Peek gefolgt von einem Pop ein konsistentes Ergebnis liefert. Aber auch das property Notify ist mit dem direkten Feldzugriff nicht wirklich...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
3. Jan 2022
Dafür würde ich eine eigene Klasse mit separater Implementierung empfehlen. Ich fände es kontraproduktiv, wenn man die wohl unvermeidlichen Performance-Nachteile auch immer für den non-thread Bereich mitschleppen müsste.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
23. Aug 2020
Bin gerade dabei die XMLDOC zu übersetzen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Uwe Raabe,
23. Aug 2020
Warum ist TRingbuffer<T>.Create overload?