Si inicializo un diccionario genérico una vez, y no se permiten más adiciones/actualizaciones/eliminaciones, ¿es seguro tener varios subprocesos leyendo sin bloqueo (suponiendo que el diccionario se inicializa antes de que los lectores se inicien)?Seguridad de subprocesos de un diccionario <TKey, TValue>
Hay una nota en la ayuda para la HashTable no genérico que dice que es seguro para múltiples lectores, pero no vi uno similar no fuera por el diccionario genérico
Solo quiero asegurarme de que entiendo que "aun así ..." parte del párrafo citado correctamente. ¿Es cierto que: (1) si el diccionario ya no se modificará (como se menciona en la pregunta del OP), la enumeración tampoco será un problema. (2) si el diccionario se modificará potencialmente en el futuro, entonces incluso la enumeración 'ConcurrentDictionary' tampoco es" intrínsecamente un procedimiento seguro para subprocesos ". ¿Correcto? – RayLuo
@RayLuo: en general, no está permitido modificar una colección mientras una enumeración está "en vuelo", independientemente de si es multiproceso o de subproceso único. –
Las colecciones de marcos concurrentes (por ejemplo, 'System.Collections.Concurrent.ConcurrentDictionary') generalmente permiten modificaciones durante la enumeración. Sin embargo, logran esto haciendo una copia de la colección y haciendo que enumere la copia. Y toda la colección está bloqueada mientras se realiza la copia. Un ingeniero de frameworks podría argumentar que esto significa que no está modificando la colección mientras la enumeración está "en vuelo" (ya que bajo el capó, todo estaba bloqueado mientras la enumeración estaba "en vuelo"), pero desde la perspectiva de un usuario de framework , la enumeración está en vuelo. – Brian