Monitor.Enter und Monitor.Exit in verschiedenen Threads

7

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?

    
eigenein 12.06.2012, 17:29
quelle

3 Antworten

4

Versuchen Sie es mit einem ManualResetEvent, um die Anzeigen zu blockieren, bis ein externes Ereignis ausgelöst wurde. MSDN Doc:

Ссылка

    
Chris 12.06.2012, 17:34
quelle
11

Das Primitive, nach dem Sie suchen, wird als Semaphore bezeichnet, was Sie tun können sicher in einen Thread eingegeben und von einem anderen Thread beendet werden.

    
Yaur 12.06.2012 17:33
quelle
7

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.

    
Tudor 12.06.2012 17:33
quelle

Tags und Links