比较好的博客文章:
https://www.cnblogs.com/wyt007/p/9486752.html
在解释死锁如何发生以及如何阻止死锁的过程中,你似乎遇到了问题。
当两个( 最小二) 线程试图获取已经被另一个锁锁定的资源的锁时,就会发生死锁。 线程 1锁定资源 1尝试获取对资源 2的锁定。 同时,线程 2对资源 2有一个锁,它尝试获取对资源 1的锁。 两个线程永远不会放弃锁,因此发生死锁。
避免死锁的最简单方法是使用超时值。 Monitor类( system.threading.monitor ) 可以在获取锁期间设置超时。
例子
1
2
3
4
5
6
7
8
9
10
11
|
if
(Monitor.TryEnter(
this
, 500))
{
//critical section
}
catch
(Exception ex)
{
}
finally
{
Monitor.Exit();
}
|