Dou*_*son 7 .net c# multithreading
如果您有一些代码块要阻止在退出和清理对象时执行,是否可以使用锁来阻止执行?
Monitor.TryEnter(cleanupLock, ref acquiredLock);
Run Code Online (Sandbox Code Playgroud)
TryEnter可用于确保代码不被执行,并且由于它不等待锁定,因此不会出现死锁.
另一个线程在确定是否需要关闭时会抓住锁.
Monitor.Enter(cleanupLock);
Run Code Online (Sandbox Code Playgroud)
如果清理线程从不调用
Monitor.Exit(cleanupLock);
Run Code Online (Sandbox Code Playgroud)
这会导致问题吗?
是的,不要求Monitor.Exit
成功Monitor.TryEnter
或Monitor.Enter
快速跟踪应用程序中的死锁.您可能能够在非常有限的情况下使其工作,但最终代码或方案将发生变化,这将会回来咬你.只是不要这样做.
唯一的"问题"是没有其他代码能够获得对cleanupLock变量的锁定.
这可能是也可能不是问题 - 但是,它有点滥用Monitor,所以我会避免这样做.最好以更常见的方式处理这种情况,IMO.
归档时间: |
|
查看次数: |
1144 次 |
最近记录: |