Tengo una función que devuelve una entrada en un diccionario, basada en la clave (nombre) y, si no existe, devuelve una nueva.Diccionario de bloqueo dentro del mismo hilo
La pregunta que tengo es con el "bloqueo doble": SomeFunction bloquea el _diccionario, para verificar la existencia de la clave, luego llama a una función que también bloquea el mismo diccionario, parece funcionar, pero no estoy seguro si hay un problema potencial con este enfoque.
public Machine SomeFunction(string name)
{
lock (_dictionary)
{
if (!_dictionary.ContainsKey(name))
return CreateMachine(name);
return _dictionary[name];
}
}
private Machine CreateMachine(string name)
{
MachineSetup ms = new Machine(name);
lock(_dictionary)
{
_ictionary.Add(name, ms);
}
return vm;
}
Creo que no entiende lo que hace el bloqueo. Locking ** bloquea todos los demás hilos para que no tengan acceso a la región protegida de código **. No hace nada en absoluto con el hilo * actual *. Puede sacar un bloqueo mil veces en el mismo objeto en el mismo subproceso, no hay problema; cada región de código bloqueada de este modo estará protegida contra el acceso por otros hilos. –
Si está buscando "bloqueos del mismo hilo", consulte la clase [Semaphore] (http://msdn.microsoft.com/en-us/library/system.threading.semaphore.aspx). – ANeves