espero que el siguiente código a un punto muerto cuando Claro intenta bloquear en el mismo objeto que se acumulan ya ha bloqueado:¿Por qué este código no se bloquea?
void Main()
{
(new SiteMap()).Build();
}
class SiteMap
{
private readonly object _lock = new object();
public void Build()
{
lock (_lock)
{
Clear();
Console.WriteLine("Build");
}
}
public void Clear()
{
lock (_lock)
{
Console.WriteLine("Clear");
}
}
}
Salida:
Claro
Construir
Edición 1
Gracias a todos por sus respuestas.
Si añado una llamada a construir dentro de la cerradura de Clear (manteniendo el resto del código de la misma):
public void Clear()
{
lock (_lock)
{
Build();
Console.WriteLine("Clear");
}
}
¿Se produce un interbloqueo (o al menos eso es lo que pienso, accidentes Pad LINQ)
De acuerdo con sus respuestas, esto no debería suceder, porque sigue siendo el mismo hilo.
Gracias!
Consulte http://www.albahari.com/threading/part2.aspx, bajo "Bloqueo anidado". –