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;