lock(this)
se bloqueará en el objeto "actual".
Bloquear en "esto" suele ser una mala idea, ya que expone el bloqueo a otro código; Yo prefiero tener un campo de sólo lectura, como esto:
public class Foo
{
private readonly object padlock = new object();
public void SomeMethod()
{
lock(padlock)
{
...
}
}
}
de esa manera todas las llamadas a SomeMethod
(y cualquier otra cosa en Foo
que bloquea el padlock
) se cierran con llave en el mismo monitor de la misma instancia de Foo
, pero nada de lo contrario, puede interferir al bloquear ese monitor.
En realidad, a menos que usted está tratando con el código "canalla", es poco probable que otro código se realidad bloqueo en la referencia a una instancia de Foo
, pero es una cuestión de encapsulación.
Niza punto acerca de la debilidad de las cerraduras de identidad. –