AGB  ·  Datenschutz  ·  Impressum  







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

Rekursion unterdrücken

Ein Thema von BiedermannS · begonnen am 11. Mai 2014 · letzter Beitrag vom 12. Mai 2014
 
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#2

AW: Rekursion unterdrücken

  Alt 11. Mai 2014, 21:36
weil bei einer Rekursion sonst ein Deadlock entstehen würde, was ich lieber über eine Exception behandeln würde.
Ich glaube die Variante mit der Methode ist der falsche Ansatz: Warum darf ein anderer Thread die Methode nicht aufrufen?

Wichtig ist, ob der aktuelle Thread schon diesen Lock belegt hat ... und selbst dann: Mutexe und Critical-Sections unter Windows sind rekursiv / reentrant.

Du könntest aber für jeden Lock auch die Thread-ID speichern, die diesen Lock gerade besitzt.
Damit könntest du rekursive Eintritte erkennen bzw. verhindern

Im Prinzip könnte das so aussehen:
Delphi-Quellcode:
procedure Locked(proc: TLockedCode);
begin
{ Abfragen der Thread-ID.
  Achtung: Das ist nur ungeschützt nur sicher,
    um festzustellen, ob die eigene Thread-ID drinsteht.
  Dann eventuell: Fehlerbehandlung. }

{ Code zum Erzeugen des Locks }
{ Eigene Thread-ID eintragen. }

proc;

{ Thread-ID des Locks auf ungültigen Wert setzen. }
{ Code zum Entfernen des Locks }
end;

Geändert von BUG (11. Mai 2014 um 21:41 Uhr)
  Mit Zitat antworten Zitat
 


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:34 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