Monitor.Enter and Monitor.Exit in different threads

.net, c#, locking, multithreading

Solution

Try using a ManualResetEvent, it's used to block thead(s) until some external event has been triggered. MSDN Doc:

http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx

Problem

`Monitor.Enter` and `Monitor.Exit` are designed to be called from the same thread. But, what if I need to release a lock in a different thread than acquired? For example: there are shared resource and asynchronous operation that uses this resource. The operation begins with `BeginOperation` and acquires the lock on the shared resource. There also the `EndOperation` method that releases the lock. `EndOperation` is typically called in another thread from a callback, thus I can't call `Monitor.Exit` in the `EndOperation` method. What is the best approach in this case? Will double-check locking with `AutoResetEvent` instead of `Monitor` be a good solution?

Original source