AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Parallele Thread Datencontainer Nutzung
Thema durchsuchen
Ansicht
Themen-Optionen

Parallele Thread Datencontainer Nutzung

Ein Thema von DarkPressure · begonnen am 9. Aug 2007 · letzter Beitrag vom 10. Aug 2007
Antwort Antwort
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#1

Parallele Thread Datencontainer Nutzung

  Alt 9. Aug 2007, 16:40
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Parallele Thread Datencontainer Nutzung

  Alt 9. Aug 2007, 17:17
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;
Andreas
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#3

Re: Parallele Thread Datencontainer Nutzung

  Alt 9. Aug 2007, 21:40
Zitat von shmia:
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;
Ich wollte nicht unbeding Indy Komponenten einbinden.
Gibt es keinen weg über die Win API?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Parallele Thread Datencontainer Nutzung

  Alt 9. Aug 2007, 22:01
Wie kommst du auf Indy ?
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Parallele Thread Datencontainer Nutzung

  Alt 9. Aug 2007, 22:14
Moin Zusammen,

Zitat von sirius:
Wenn du EnterCriticalSection aufrufst werden alle anderen Threads blockiert.
Vielleicht präziser:
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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#6

Re: Parallele Thread Datencontainer Nutzung

  Alt 10. Aug 2007, 01:47
Zitat von sirius:
Wie kommst du auf Indy ?
Hab mich der Borland Hilfe bedient und bin unglücklicherweise bei Indy gelandet.
Und danke für die Tipps, werde mich gleich dere annehmen ^^
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Parallele Thread Datencontainer Nutzung

  Alt 10. Aug 2007, 10:19
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.
  Mit Zitat antworten Zitat
DarkPressure

Registriert seit: 24. Mär 2006
28 Beiträge
 
Delphi 2006 Architect
 
#8

Re: Parallele Thread Datencontainer Nutzung

  Alt 10. Aug 2007, 17:25
Sorry hat sich erledigt.
Hatte da ein bischen Mist gebaut ^^
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz