AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Thread Synchronisation

Ein Thema von Schorschi5566 · begonnen am 22. Aug 2010 · letzter Beitrag vom 22. Aug 2010
Antwort Antwort
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: Thread Synchronisation

  Alt 22. Aug 2010, 20:04
Hallo Andreas,

ich habe es so verstanden, dass die Interlocked-Funktionen dafür sorgen, dass die Kommandos zum Bearbeiten einer Integer o. ä. innerhalb einer Zeitscheibe erledigt sind.

Bleibt immer noch die Frage in Verbindung mit Criticalsections:

Muss ein lesender Zugriff in einem Thread auf eine Variable, die von anderen Threads geschrieben wird mit einer Criticalsection umgeben werden?

Folgender Fall für einen Hauptthread, der auf Ergebnisse aus den Subthreads wartet (Beispiel):

Delphi-Quellcode:
      bRunning := True;
      while bRunning do
      begin
        i := 0;
        while (i < Formulas.Count) do
        begin
          // FThreadResult sei eine Extended-Variable
          // Muss hier eine Criticalsection rein?
          if Formulas[i].FThreadResult > 0 then
          begin
            bRunning := False; // Schleife verlassen, Ergebnis ist da.
          end;
          inc(i);
        end;
      end;
Meiner Meinung nach ist es hier nicht nötig eine Criticalsection einzufügen, da die Schleife ja weiter durchlaufen wird, wenn ein Thread gerade die Ergebnisvariable beschreibt und somit der richtige Wert einen Durchlauf später vorhanden ist.

Oder liege ich da falsch und der lesende Zugriff könnte den schreibenden Thread blockieren?


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Thread Synchronisation

  Alt 22. Aug 2010, 20:11
Muss ein lesender Zugriff in einem Thread auf eine Variable, die von anderen Threads geschrieben wird mit einer Criticalsection umgeben werden?
Was hast du an unseren Antworten nicht verstanden?

Und ob die Schleife verlassen wird oder nicht, spielt keine Rolle. Es kommt darauf an, ob der Thread beim Schreiben der Variable unterbrochen wird oder nicht. Es kann zum Beispiel passieren, dass, wenn ein Record mit mehreren Feldern geschrieben wird, der Thread nach der Hälfte der Felder die Rechenzeit entzogen bekommt. Dann befinden sich die Daten in einem inkonsistenten Zustand beim Lesen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Thread Synchronisation

  Alt 22. Aug 2010, 20:26
Hallo Luckie,

also habe ich Recht.

"Nein, lesende Zugriffe müssen nicht durch Criticalsections geschützt werden." wäre sehr viel klarer gewesen.

Dass ich schreibende Zugriffe schützen muss war mir vorher schon klar und das war auch nicht meine Frage.


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Thread Synchronisation

  Alt 22. Aug 2010, 20:46
Nein, du musst auch lesende Zugriffe schützen, wenn komplexe Datentypen geschrieben werden. Ich dachte, das wäre durch mein Beispiel deutlich geworden.

Alles Käse. Wenn der schriebende Zugriff geschützt ist, kann ja gar nicht lesend drauf zu gegriffen werden, weil der Zugriff gesperrt ist.

Oh Mann, ich werde alt.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie (22. Aug 2010 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Schorschi5566

Registriert seit: 6. Feb 2006
197 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Thread Synchronisation

  Alt 22. Aug 2010, 21:12
Hallo Luckie,

kein Problem.

Danke für die Antworten. Die letzten zehn Minuten hat sich nichts mehr verhakt.


Grüße,
Uwe
Uwe
"Real programmers can write assembly code in any language." - Larry Wall
Delphi programming rocks
  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 22:22 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