Me gustaría saber si hay alguna guía que un desarrollador debe seguir en cuanto a cuándo (y dónde) colocar bloqueos.Pautas de cuándo utilizar el bloqueo
Por ejemplo: entiendo que código como este debería estar bloqueado, para evitar la posibilidad de que otro hilo cambie inesperadamente el valor de SomeHeapValue.
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = inputValue_;
}
}
Mi pregunta es, sin embargo, ¿qué tan profundo se puede hacer con el bloqueo? Por ejemplo, si tenemos este código:
class Foo
{
public SomeHeapObject myObject;
public void DoSummat(object inputValue_)
{
myObject.SomeHeapValue = GetSomeHeapValue();
}
}
¿Hay que fijar el método DoSummat (...), o debemos fijar el método GetSomeHeapValue()?
¿Hay alguna guía que todos tengan en cuenta al realizar un código de subprocesos múltiples?
gracias que es útil ... pero ¿por qué todos los ejemplos usan variables miembro estáticas? También hay problemas con la seguridad de subprocesos en las variables miembro de la clase, ¿verdad? – miguel
@miguel: es posible bloquear el miembro de instancia utilizando "lock (this)", la explicación y Example2 en esta página proporcionan más detalles: http://msdn.microsoft.com/en-us/library/c5kehkcz%28VS. 71% 29.aspx. Creo que en el sitio de Albahari está usando estática porque entonces no tiene que hacer una instancia de una clase, lo que hace que sus ejemplos sean más cortos. – user218447
@miguel: el objeto de bloqueo debe compartirse entre subprocesos para que se pueda usar, y estático es una forma limpia y fácil de hacerlo. La estática no es intrínsecamente malvada, solo mal utilizada como los globales de antaño. –