我已經寫了一個我認爲應該成爲僵局的有效案例的測試。看起來,一旦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