Monitor.Enter
und Monitor.Exit
sind so konzipiert, dass sie vom selben Thread aus aufgerufen werden können. Aber was ist, wenn ich eine Sperre in einem anderen Thread als acquired lösen muss?
Beispiel: Es gibt eine gemeinsame Ressourcen- und asynchrone Operation, die diese Ressource verwendet. Die Operation beginnt mit BeginOperation
und erwirbt die Sperre für die freigegebene Ressource. Es gibt auch die Methode EndOperation
, die die Sperre freigibt. EndOperation
wird normalerweise in einem anderen Thread von einem Callback aufgerufen, daher kann ich Monitor.Exit
in der Methode EndOperation
nicht aufrufen. Was ist der beste Ansatz in diesem Fall? Wird die Sperrung mit AutoResetEvent
anstelle von Monitor
eine gute Lösung sein?
Wenn Sie .NET 4.0 verwenden können, können Sie es durch System.Threading.Semaphore ersetzen , mit dem Sie Berechtigungen in einem Thread erwerben und in einem anderen freigeben können.
Die Semaphore-Klasse erzwingt keine Thread-Identität bei Aufrufen von WaitOne oder Release.
Tags und Links .net c# multithreading locking