Monitor.Enter
e Monitor.Exit
sono progettati per essere richiamati dallo stesso thread. Ma cosa succede se ho bisogno di rilasciare un lucchetto in un thread diverso da quello acquisito?Monitor.Enter e Monitor.Exit in diversi thread
Ad esempio: esistono risorse condivise e operazioni asincrone che utilizzano questa risorsa. L'operazione inizia con BeginOperation
e acquisisce il blocco sulla risorsa condivisa. C'è anche il metodo EndOperation
che rilascia il blocco. EndOperation
viene in genere chiamato in un altro thread da un callback, pertanto non è possibile chiamare Monitor.Exit
nel metodo EndOperation
. Qual è l'approccio migliore in questo caso? Il doppio controllo del blocco con AutoResetEvent
anziché Monitor
può essere una buona soluzione?
usare un "semaforo"? –
@ pst Perché in particolare "Semaforo" e non "Evento"? – eigenein
Vedere primitive di sincronizzazione come [Semaforo, SemaforoSlim, ReaderWriterLock, ReaderWriterLockSlim, ManualResetEvent, ManualResetEventSlim, AutoResetEvent, CountdownEvent, Interlocked, Mutex ecc.] (Http://msdn.microsoft.com/en-us/library/system.threading.aspx) –