我已经写了一个我认为应该成为僵局的有效案例的测试。看起来,一旦lock
已被某个类的实例获取,那么即使我明确尝试再次调用另一个应该返回lock
的方法,该实例也不需要重新获取lock
。锁定已锁定并进一步尝试锁定不会阻止:是否C#锁可重入?
这里是类:
internal class Tester
{
private readonly object _sync = new object();
public Tester() { }
public void TestLock()
{
lock (_sync)
{
for (int i = 0; i < 10; i++)
{
Deadlock(i);
}
}
}
private void Deadlock(int i)
{
lock (_sync)
{
Trace.WriteLine(i + " no deadlock!");
}
}
}
输出:
0无僵局!
1没有死锁!
2没有死锁!
3没有死锁!
4没有死锁!
5没有死锁!
6没有死锁!
7没有死锁!
8没有死锁!
9没有死锁!
我原以为这会造成死锁......任何人都可以对此有所了解吗?
我对多线程非常舒服,但我想我只是从来没有意识到C#锁是可重入的。感谢您的回答... – Kiril 2011-01-30 22:39:36