Share via


Colecciones y sincronización (seguridad para subprocesos)

De forma predeterminada, las clases de System.Collections y los espacios de nombres relacionados no son seguros para los subprocesos. Varios sistemas de lectura pueden leer con confianza la colección; sin embargo, cualquier modificación realizada en ella produce resultados indefinidos para todos los subprocesos que tienen acceso a la colección, incluidos los del sistema de lectura.

Las clases System.Collections se pueden convertir en seguras para los subprocesos mediante cualquiera de los siguientes métodos:

  • Crear un contenedor seguro para subprocesos con el método Synchronized y tener acceso a la colección exclusivamente a través de ese contenedor.

  • Si la clase no tiene un método Synchronized, derivar la clase e implementar un método Synchronized utilizando la propiedad SyncRoot.

  • Utilizar un mecanismo de bloqueo, como la instrucción lock en C# (SyncLock en Visual Basic, la clase Monitor en C++), en la propiedad SyncRoot al obtener acceso a la colección.

Al implementar el método Synchronized, las clases derivadas deberán reemplazar la propiedad IsReadOnly para que se devuelva el valor correcto.

La clase Array no incluye ningún método Synchronized y, aunque tiene una propiedad SyncRoot, no se puede derivar. Por lo tanto, sólo se puede convertir una matriz en segura para los subprocesos a través del mecanismo de bloqueo.

Las clases de colecciones genéricas no incluyen miembros de sincronización; sin embargo, algunas clases genéricas, como Collection, Dictionary y List, implementan explícitamente los miembros de sincronización heredados de la interfaz ICollection no genérica.

Vea también

Referencia

System.Collections
System.Collections.Specialized
System.Collections.Generic

Otros recursos

Crear y manipular colecciones