Wie kann ich eine Thread-sichere Liste Wrapper in Delphi implementieren?
-
08-07-2019 - |
Frage
Ich habe eine Liste Wrapper, der zwei Tstringlists und ein TClassList
hältIch brauche dieses Thema sicher zu sein, so dass:
- Concurrent schreibt nicht erlaubt sind (Zustand von einer Art warten soll, eingegeben werden)
- Beim Lesen während des Schreibens (oder umgekehrt) ist nicht erlaubt (Zustand von einer Art warten soll, eingegeben wird)
- Concurrent liest sind erlaubt
Alle Ideen, wie kann ich dies tun? Mein Instinkt sagt mir, es braucht mehr als nur einen kritischen Abschnitt, vielleicht ein Semaphore oder „Verbrauchszähler“, vielleicht eine dieser in Verbindung mit einem CS.
Ich bin nur nicht ganz sicher, wo ich anfangen soll - alles von einem Gesamtkonzept in Englisch to-Code Psuedo, würde die Umsetzung oder externer Link delphi sehr geschätzt
.Lösung
Sie sollten einen Blick auf die TMultiReadExclusiveWriteSynchronizer Klasse deklariert in SysUtils.pas ...
Andere Tipps
Haben Sie einen Blick auf dieses Tutorial. Einfädeln des Delphi Way
Sehen Sie in Kapitel 11, aber es ist alles gute Sachen.
Sie wirklich TThreadList aussehen sollen.
Die Methoden .Add, .Remove, .Clear sperren automatisch die Liste für Sie. Bei Bedarf können Sie auch Sperren / Entsperren nach Bedarf:
x.LockList;
try
//do whatever
finally
x.Unlocklist;
end;
TMultiReadExclusiveWriteSynchronizer ist eine großartige Idee, aber ich weiß nicht, ob sie jemals alle Bugs ausgebügelt. Es ist schon immer Probleme unter Last hat.