En el caso de new
, el Type
no importa, la instancia lo hace. En este caso, está hablando de un objeto synclock: un objeto que se utiliza para bloquear secciones de código (s) para evitar el acceso simultáneo.
Usar otro Type
que object
para sincronizar es una pérdida de memoria porque no utiliza esta instancia para nada más.
Hay circunstancias en las que puede bloquear otro tipo: cuando necesita bloquear una instancia específica. El problema principal es: la instancia debe inicializarse para bloquearla.Y en la mayoría de los casos, desea sincronizar la iniciación de la instancia :)
Pero en algunos casos, puede bloquear la instancia directamente; como un diccionario, por ejemplo (bueno, casi directamente en este caso;)).
private Dictionary<string,string> _dictionary = new Dictionary<string,string>();
public void AddValue(string key, string value)
{
lock (((IDictionary)_dictionary).SyncRoot) // SyncRoot recommended
{
if (!_dictionary.ContainsValue(value))
_dictionary.Add(key, value);
}
}
Pero la cuestión es: incluso si esto va a funcionar, siempre preguntarse: "¿No es una idea mejor para crear un objeto de fijación específica en lugar"?
¡Agradable! No sabía sobre la propiedad 'SyncRoot'. –