Bloquear aqcuired e novas tentativas de bloqueio não bloqueiam: os bloqueios C # são reentrantes?

Eu escrevi um teste do que eu acho que deveria ser um caso válido para um impasse. Parece que uma vez que olock foi adquirida por uma instância da classe a, essa instância não precisa readquirir olock mais, mesmo se eu tentar explicitamente chamar outro método que deverialock novamente.

Aqui está a classe:

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!");
        }
    }
}

Resultado:

0 sem impasse!
1 sem impasse!
2 sem impasse!
3 sem impasse!
4 sem impasse!
5 sem impasse!
6 sem impasse!
7 sem impasse!
8 sem impasse!
9 sem impasse!

Eu teria pensado que isso causaria um impasse ... alguém pode lançar alguma luz sobre isso?

questionAnswers(3)

yourAnswerToTheQuestion