eig*_*ein 9 .net c# multithreading locking
Monitor.Enter并Monitor.Exit设计为从同一个线程调用.但是,如果我需要在不同的线程中释放锁而不是获取的呢?
例如:存在使用此资源的共享资源和异步操作.操作从BeginOperation共享资源开始并获取锁定.还有EndOperation释放锁的方法.EndOperation通常在回调的另一个线程中调用,因此我无法调用Monitor.Exit该EndOperation方法.在这种情况下,最好的方法是什么?是否会重复检查锁定AutoResetEvent而不是Monitor一个好的解决方案?
如果您可以使用.NET 4.0,则可以将其替换为System.Threading.Semaphore,它允许您在一个线程中获取许可并在另一个线程中释放它们.
Semaphore类在调用WaitOne或Release时不强制执行线程标识.
尝试使用 ManualResetEvent,它用于阻止 thead,直到触发某些外部事件。MSDN 文档:
http://msdn.microsoft.com/en-us/library/system.threading.manualresetevent.aspx
| 归档时间: |
|
| 查看次数: |
4803 次 |
| 最近记录: |