Monitor.Enter
y Monitor.Exit
están diseñados para ser llamados desde el mismo subproceso. Pero, ¿qué sucede si necesito liberar un bloqueo en un hilo diferente al adquirido?Monitor.Enter y Monitor.Exit en diferentes subprocesos
Por ejemplo: hay recursos compartidos y una operación asincrónica que utiliza este recurso. La operación comienza con BeginOperation
y adquiere el bloqueo en el recurso compartido. También existe el método EndOperation
que libera el bloqueo. EndOperation
normalmente se llama en otro subproceso de una devolución de llamada, por lo que no puedo llamar al Monitor.Exit
en el método EndOperation
. ¿Cuál es el mejor enfoque en este caso? ¿Verificará el bloqueo con AutoResetEvent
en lugar de Monitor
? Será una buena solución?
utilizar un "semáforo"? –
@pst ¿Por qué específicamente 'Semaphore' y no' Event'? – eigenein
Ver primitivas de sincronización como [Semaphore, SemaphoreSlim, ReaderWriterLock, ReaderWriterLockSlim, ManualResetEvent, ManualResetEventSlim, AutoResetEvent, CountdownEvent, Interlocked, Mutex etc.] (http://msdn.microsoft.com/en-us/library/system.threading.aspx) –