AGB  ·  Datenschutz  ·  Impressum  







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

atomare Ausführung

Ein Thema von Bomberbb · begonnen am 13. Nov 2008 · letzter Beitrag vom 13. Nov 2008
Antwort Antwort
Seite 1 von 2  1 2      
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

atomare Ausführung

  Alt 13. Nov 2008, 15:22
Hallo,

ich hab mich jetzt näher mit oop befasst und habe ein Problem. Bei einer von mir erstellten Klasse darf eine Methode dieser Klasse zum gleichen Zeitpunkt immer nur einmal ausgeführt werden.
Ich hab das jetzt gemacht mit der Abfrage
Delphi-Quellcode:
if not Methodeaktiv then
Begin
  Methodeaktiv:=true;
  ...
End;
Nun ist es mir beim Debuggen allerdings passiert, dass zwischen Zeile 1 und 3 ein anderes Objekt die Methode ausgeführt hat.

Meine Frage ist, ob man mit Delphi5 eine Methode oder mehrere Anweisungen atomar ausführen lassen kann?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:25
Der Klasse oder eines Objektes?
Semaphore, Monitor, ...
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:26
Du kannst eine Critical Section benutzen, die sollte das wirksam verhindern
(evtl. ein bisschen Overkill)

Ich nehme mal an, du verwendest bereits mehrere Threads? Wenn nicht, dürfte das Problem ja eigentlich nicht auftreten ...
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#4

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:35
@mkinzler
Der Klasse!
Monitore habe ich unter Delphi 5 nicht gefunden. Und zum Arbeiten mit Semaphoren brauche ich auch unteilbare/atmoare Blöcke...
@jfheins
Jein, ich habe mehrere Zeichenflächen, die Objekte des gleichen Typs sind. Dort wird das Zeichnen nacheinander angestoßen und wegen der Parallelität der Objekte wohl 'quasiparallel' ausgeführt.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:40
Ok, dann nimm eine Klassenvariable (Gibts doch bestimmt in aktuelleren Delphi Versionen?) und benutze die Critical Section.
Diese sorgt dann dafür, dass die Funktion nicht in mehreren Objekten gleichzeitig ausgeführt wird.

Es muss aber eben ne Klassenvariable sein, damit nicht jedes Objekt eine eigene CriticalSection bekommt.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#6

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:43
Nun in Delphi 5 gibts keine Klassenvariablen, aber ich werde mich mal zu Critical Section schlau machen, kannte ich bis dato noch nicht...
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#7

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:43
Nur ein kleiner Hinweis:
Atomar bedeutet etwas anderes als das was Du meinst. Atomar bedeutet, das etwas entweder komplett durchgeführt wird (Lese oder Schreiboperation z.B.) oder gar nicht. Das es also nur zwei Ergebnisse gibt und man nicht in irgendeinem Zwischenstadium landet, das etwas nur halb geschrieben/gelesen ist.

Ansonsten sind Critical Sections die wahrscheinlich einfachste Lösung für Dein Problem. Siehe einfach mal MSDN-Library durchsuchenEnterCriticalSection oder aber einfach mal im Board nach Hier im Forum suchenCritical Section suchen.
Fridolin Walther
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
877 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:46
Aber Critical Sections bringen nichts, wenn man mit nur einem Thread arbeitet. Denn ein Thread kann beliebig oft in eine CS eintreten - nur ein anderer Thread ist dann dafür gesperrt.
The angels have the phone box.
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#9

Re: atomare Ausführung

  Alt 13. Nov 2008, 15:51
Zitat von Gausi:
Aber Critical Sections bringen nichts, wenn man mit nur einem Thread arbeitet. Denn ein Thread kann beliebig oft in eine CS eintreten - nur ein anderer Thread ist dann dafür gesperrt.
Nunja, ist die Frage ob er verhindern will ob eine Methode gleichzeitig mehrfach ausgeführt wird (Multi Threading) oder ob er Rekursion verhindern will (das also seine Methode etwas macht, was evtl. dafür sorgt, das seine Methode direkt oder indirekt nochmal aufgerufen wird). Gegen Rekursion hilft eine Critical Section natürlich nicht. Und sollte er Fiber statt Threads verwenden, sind Critical Sections auch nutzlos .
Fridolin Walther
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#10

Re: atomare Ausführung

  Alt 13. Nov 2008, 16:08
Also, für meinen Fall scheint 'Critical Sections' zu funktionieren... Ich denke, auch wenn ich nicht explizit mehrere Threads angestoßen habe, existieren doch mehrere Objekte gleichzeitig und können Zeitgleich agieren und dass muss doch zumindest ähnlich wie MultiThreading behandelt werden...? oder liege ich da jetzt total falsch???
  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 10:04 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