![]() |
Parallele Thread Datencontainer Nutzung
Hallo erstmal,
ich hätte da ne Frage bezüglich der Datentyp bzw. Synchronisation zwischen 2 Threads. Meine Situation ist folgende: Ich öffne 2 Threads, der eine Thread(I) hat die Aufgabe einen Datencontainer(String/Char/..) mit Daten zu füllen. Thread(II) ist parallel dabei Daten aus diesem Container zu lesen und auch zu entfernen. Momentan hab ich Bedenken, dass es dabei zu Konflikten kommen könnte. Bezüglich der Variablen zwischen 2 Threads hab ich mir Bereits Luckies PDF über Threads durchgelesen, jedoch wurde ich da nur schlauer in Bezug auf 2 Zahlencontainer. Deswegen würde ich grundsätzlich wissen, sind diese Bedenken evtl. unbegründet, oder welcher Datentyp sich idealerweise anbieten würde und wie ich die Zugriffe auf den Container am besten regle. Danke für jede Antwort, DarkPressure |
Re: Parallele Thread Datencontainer Nutzung
Du brauchst neben dem Datencontainer ein Objekt der Klasse TCriticalSection.
(wird vom Hauptthread erzeugt)
Delphi-Quellcode:
// im Thread bei jedem Zugriff auf den datencontainer
critsect.Enter; datencontainer.Add(...); critsect.Leave; |
Re: Parallele Thread Datencontainer Nutzung
Zitat:
Gibt es keinen weg über die Win API? |
Re: Parallele Thread Datencontainer Nutzung
Wie kommst du auf Indy :gruebel: ?
TCriticalSectioin ist eine Komponente der VCL. Du kannst dasselbe erreichen indem du die WinAPI-Funktionen verwendest: InitializeCritcalSection EnterCriticalSection LeaveCriticalSection DeletecriticalSection Mit InitilaizeCriticalSection erzeugst du ein Object (LPCRITICAL_SECTION) welches du global irgendwo ins Programm legst und welches du dann immer benutzt. Wenn du EnterCriticalSection aufrufst werden alle anderen Threads blockiert. Nach Leavexxx geht alles wieder seinen gewohnten Gang. Aber TCriticalSection macht auch nix anderes. Alternativ kannst du auch versuchen mit Messages zu arbeiten. |
Re: Parallele Thread Datencontainer Nutzung
Moin Zusammen,
Zitat:
Andere Threads, die EnterCriticalSection mit dem gleichen Objekt aufrufen bleiben an dieser Stelle stehen, bis der Thread der gerade die CriticalSection durchläuft das Objekt mit LeaveCriticalSection wieder freigegeben hat. |
Re: Parallele Thread Datencontainer Nutzung
Zitat:
Und danke für die Tipps, werde mich gleich dere annehmen ^^ |
Re: Parallele Thread Datencontainer Nutzung
Ich habe irgendwo gelesen, das CriticalSections zum langsamsten gehören, was man zur Thread-Sync benutzen kann. Vielleicht hat sich das derweil geändert ?
Ansonsten würde ich einen MultiReadExclusiveWriteSynchronizer (ja, das Ding heißt wirklich so !) verwenden. Dieses Teil basiert IIRC nicht auf CritSects und dürfte somit schneller sein - erfüllt aber bei ausschließlicher Verwendung von "BeginWrite" denselben Zweck. |
Re: Parallele Thread Datencontainer Nutzung
Sorry hat sich erledigt.
Hatte da ein bischen Mist gebaut ^^ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 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