Thema: Delphi Rekursion unterdrücken

Einzelnen Beitrag anzeigen

Benutzerbild von BUG
BUG

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

AW: Rekursion unterdrücken

  Alt 11. Mai 2014, 22: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 22:41 Uhr)
  Mit Zitat antworten Zitat