¿Cuándo se deben usar los bloqueos? ¿Solo cuando se modifican datos o cuando se accede a ellos también?bloqueo solo cuando se modifica el método entero
public class Test {
static Dictionary<string, object> someList = new Dictionary<string, object>();
static object syncLock = new object();
public static object GetValue(string name) {
if (someList.ContainsKey(name)) {
return someList[name];
} else {
lock(syncLock) {
object someValue = GetValueFromSomeWhere(name);
someList.Add(name, someValue);
}
}
}
}
¿Debería haber un bloqueo alrededor de todo el bloque o está bien simplemente agregarlo a la modificación real? Tengo entendido que aún podría haber alguna condición de carrera en la que una llamada no la haya encontrado y haya comenzado a agregarla, mientras que otra llamada podría haber pasado a la misma situación, pero no estoy seguro. Locking sigue siendo tan confuso. No me he encontrado ningún problema con el código anterior, pero podría ser afortunado hasta ahora. Cualquier ayuda anterior se apruebe, así como cualquier recurso útil sobre cómo/cuándo bloquear objetos.
Gran enlace para todos los mecanismos de bloqueo disponibles. Solo había escuchado sobre 'lock'. – MyNameIsJob
Buena suerte: si puedes dominar estas cosas, estarás en una pequeña minoría de desarrolladores que están bien preparados para un aumento en el desarrollo multinúcleo. –