AGB  ·  Datenschutz  ·  Impressum  







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

Synchronisation - CriticalSection?

Ein Thema von WorstNightmare · begonnen am 9. Dez 2009 · letzter Beitrag vom 9. Okt 2015
Antwort Antwort
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Synchronisation - CriticalSection?

  Alt 9. Dez 2009, 15:58
Hallo,

ein Teil eines Projekts von mir ist, wie mir letztens auffiel etwas schlampig geschrieben. Es gibt zwei Threads, die im Worst ( ) case dasselbe Eingabe-Formular öffnen und abfragen müssen. Dieses Problem könnte ich lösen, indem ich im Handler, der die Operationen mit diesem Formular verwaltet, eine CriticalSection global deklariere und sie in der Methode, die das Formular aufruft verwende, richtig?
Zusätzlich werden in allen möglichen Teilen und von allen möglichen Threads des Programmes Log-Funktionen aufgerufen, die in ein Memo schreiben. Kann ich da genauso mit einer CriticalSection arbeiten? Was kann eigentlich alles passieren, wenn ich das nicht tue und wirklich mal was exakt gleichzeitig aufgerufen wird? Ich höre immer, dass es nicht gut ist, habe aber eigentlich noch nie ein Beispiel gesehen, warum das so ist.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

Re: Synchronisation - CriticalSection?

  Alt 9. Dez 2009, 16:39
CriticalSections helfen hier garnichts.

Man ruft in einem Thread kein Formular oder irgendetwas von der VCL direkt auf!

Nutzte Synchronize, um auf die VCL/Formulare/Memos aufzurufen oder drauf zuzugreifen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#3

Re: Synchronisation - CriticalSection?

  Alt 9. Dez 2009, 17:04
Mh, gut. Aber wenn ich verhindern möchte, dass Code zur selben Zeit ausgeführt wird kann ich eine benutzen, oder?
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Synchronisation - CriticalSection?

  Alt 10. Dez 2009, 11:54
Zitat von WorstNightmare:
Mh, gut. Aber wenn ich verhindern möchte, dass Code zur selben Zeit ausgeführt wird kann ich eine benutzen, oder?
Die Aufgabe von CriticalSections ist Codeabschnitte vor der gleichzeitigen Ausführung oder Speicherbereiche bzw. Variablen vor dem gleichzeitigen Zugriff aus verschiedenen Threads zu schützen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

Re: Synchronisation - CriticalSection?

  Alt 10. Dez 2009, 12:12
Zitat von Blup:
Die Aufgabe von CriticalSections ist Codeabschnitte vor der gleichzeitigen Ausführung oder Speicherbereiche bzw. Variablen vor dem gleichzeitigen Zugriff aus verschiedenen Threads zu schützen.
Jupp, mam muß dann einfach nur alle Lese-/Schreibzugriffe auf die entsprechenden resourcen mit diesen umschließen.
Es gibt aber auch noch andere Schutz-Varianten: z.B. TSimpleRWSync, welche etwas optimiert sind (gleichzeitiges Lesen erlaubt)

Die VCL hat ihre eigene ChriticalSection, an welche man extern nicht rankommt, aber dieses erledigt ja Synchronize für einen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

AW: Re: Synchronisation - CriticalSection?

  Alt 9. Okt 2015, 12:16
Ich bitte um Nachsicht, daß ich meine Erfahrungen in diese alte Diskussion schreibe. Hätte ich diese Diskussion nicht gefunden, hätte ich wohl nach den kritischen Sektionen im Zusammenhang mit der Synchronisation gefragt.

Die VCL hat ihre eigene ChriticalSection, an welche man extern nicht rankommt, aber dieses erledigt ja Synchronize für einen.
Hängt von der Delphi-Version ab: Ein Blick in die Unit-Quelltexte (Classes.pas) verrät nicht nur, daß nahezu ständig am Synchronize-(Quell-)Code optimiert wurde, sondern auch, daß (erst?) ab Delphi 6 Synchronize mit kritischen Sektionen umhüllt ("geschützt") wird. Verläßlich stabil läuft es nach meiner Erfahrung aber ab Delphi 6 dennoch nicht. Entweder, man benutzt Compilate ab Delphi 7 oder bei Delphi 5 oder 6 eben im eigenen Quelltext zusätzlich umhüllende kritische Sektionen (bis Delphi 5 helfen nicht einmal die sicher).

Geändert von Delphi-Laie ( 9. Okt 2015 um 14:08 Uhr)
  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 19: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