Ah, jetzt verstehe ich vermutlich, was du vorhast: Jeder übergebenen Funktion wird in deiner Funktion ein Lock zugeordnet.
Aber wie gesagt: Ein Deadlock muss nicht auftreten, wenn du rekursive Synchronisierungsmittel benutzt.
Zitat:
After a thread obtains ownership of a
mutex, it can specify the same
mutex in repeated calls to the wait-functions without blocking its execution. This prevents a thread from deadlocking itself while waiting for a
mutex that it already owns.
Zitat:
When a thread owns a critical section, it can make additional calls to EnterCriticalSection or TryEnterCriticalSection without blocking its exe
Wenn du trotzdem noch Rekursion feststellen möchtest, bleibt mein Vorschlage der Gleiche:
Merke dir pro Lock bzw. Methode, welcher Thread der Besitzer ist (sollte ja nur einer sein). Wenn es der gerade eintretende Thread ist, kannst du deine
Exception werfen.