AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

Ein Thema von uups · begonnen am 23. Jan 2017 · letzter Beitrag vom 25. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2      
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#1

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 12:49
Ich habe ein ähnliches Szenario wie du und bin immer gut mit TThread.Queue() klar gekommen. Soweit ich weiß legt Queue alles im Stack ab und dann wird der Stack nach und nach abgearbeitet.
Das schon. Allerdings werden in meinem Fall mehrere Aufgaben gleichzeitig gestartet, bis die zuvor festgelegte (für jedes System individuell errechnete) Maximalzahl von gleichzeitig zu ausführenden Aufgaben erreicht ist. Im Fall mit TThread.Queue() wird der Stack sequentiell verarbeitet.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#2

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 12:53
Ok daran habe ich nicht gedacht.
Demnach bringen mehrere Threads mit derselben Aufgabe rein gar nicht, wenn man mit Queue alles in den Stack legt.
Dann müssen wohl die Profis ran

Andererseits... du fügst doch nur Einträge in eine ObjectList hinzu.
Die eigentliche Arbeit findet doch woanders statt. Dann sollte Queue doch eigentlich doch kein Problem sein.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 12:56
.. eventuell magst Du ja auch die TObjectList mit der TThreadList austauschen?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#4

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 13:43
.. eventuell magst Du ja auch die TObjectList mit der TThreadList austauschen?
Könnte man machen, aber dabei erübrigt sich lediglich die TCriticalSection für den Zugriff auf TObjectList. Die eigentliche Frage bleibt aber: reicht allein die Absicherung der TObjectList oder muss ich auch noch den Zugriff auf den Thread mittels AddToQueue() oder Count() absichern?
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 13:45
Count ist doch nur lesend. Ich denke da muss man nix absichern.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 14:51
.. eventuell magst Du ja auch die TObjectList mit der TThreadList austauschen?
Könnte man machen, aber dabei erübrigt sich lediglich die TCriticalSection für den Zugriff auf TObjectList. Die eigentliche Frage bleibt aber: reicht allein die Absicherung der TObjectList oder muss ich auch noch den Zugriff auf den Thread mittels AddToQueue() oder Count() absichern?
Das eine CriticalSection im Object (in der ObjectListe) vorhanden ist, sorgt ja nicht dafür das sie threadsafe ist.
Das wird durch "enter" und "leave" sichergestellt.
Mit der ThreadList müsstest Du dich nicht mehr darum zu kümmern zugriffe auf die Liste abzusichern.
Das macht die Klasse dann automatisch.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#7

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 14:53
A propos Zugriffe.

Muss man nur schreibende Zugriffe mit einer CriticalSection absichern oder auch lesende?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 14:56
A propos Zugriffe.

Muss man nur schreibende Zugriffe mit einer CriticalSection absichern oder auch lesende?
ich würde auch lesende absichern.
Denn ich denke es wird krachen wenn ein Listenelemet gelesen wird und ein anderer Thread löscht im gleichen Zeitraum diese Element.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#9

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 14:58
Muss man nur schreibende Zugriffe mit einer CriticalSection absichern oder auch lesende?
Ich würde spontan sagen, sowohl als auch. Anderfalls könnte ich mir die Existenz des sehr langsamen TMultipleReadExclusiveWriteSynchronizer nicht erklären können.
  Mit Zitat antworten Zitat
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#10

AW: Zugriffe auf Objekt aus mehreren Threads - wie richrig synchronisieren?

  Alt 23. Jan 2017, 13:01
Die eigentliche Arbeit findet doch woanders statt...
So ist es. Der Thread startet für jede Aufgabe einen neuen Thread, der die eingentliche Verarbeitung der Daten übernimmt. Die Queue ist genau dafür da, um die Anzahl dieser Verarbeitungsthreads nicht zu überschreiten und damit das System zu überlasten.

.. Dann sollte Queue doch eigentlich doch kein Problem sein.
Doch, denn die Aufrufe der Verarbeitungsthreads landen dann immer noch im Stack.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:25 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