Pregunta

Lectura documentación msdn para los diccionarios que dice: & Los miembros estáticos públicos (compartidos en Visual Basic) de este tipo son seguros para subprocesos. No se garantiza que los miembros de la instancia sean seguros para subprocesos. & Quot;

Esto significa que con un diccionario como este:


static object syncObject = new object();
static Dictionary<string,MyObject> mydictionary= new Dictionary<string, MyObject>();

¿Es innecesario hacer algo como el siguiente código?


lock (syncObject)
{
   context = new TDataContext();
   mydictionary.Add("key", myObject);
}
¿Fue útil?

Solución

Se refiere a métodos estáticos en la clase misma. La declaración es en realidad documentación repetitiva agregada a la mayoría de las clases. El Diccionario & Lt; & Gt; la clase en realidad no expone ningún método estático.

Tendrá que serializar el acceso a su clase de diccionario utilizando la palabra clave de bloqueo o tal vez incluso un ReaderWriterLock. Sin embargo, el enhebrado es un tema bastante complejo y la palabra clave de bloqueo no siempre es apropiada. Hay un gran libro de Joe Duffy & Quot; Programación concurrente en Windows < !> quot; que profundiza en la protección de los recursos de aplicaciones compartidas.

Otros consejos

Está malinterpretando " miembros públicos estáticos de este tipo " como " instancias públicas estáticas de este tipo " ;.

Significa que si llama al método Add (un método de instancia) será mejor que se asegure de tener acceso exclusivo al Diccionario utilizando su propia semántica de bloqueo o serialización. Podrían ocurrir cosas malas si dos hilos están modificando el estado de su Diccionario al mismo tiempo, y es su responsabilidad asegurarse de que esto no suceda. No hay nada dentro del método Agregar del diccionario que haga este bloqueo por usted.

Sin embargo, si llama a algún método estático en el Diccionario (del cual no hay ninguno útil), estaría bien sin un bloqueo.

Esta es la regla general para todos los tipos .NET en el BCL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top