2010-01-03 13 views
12

¿Es seguro el subproceso Tipo de mapa Go? Tengo un programa que tiene muchas rutinas leyendo y escribiendo en un tipo de mapa. Si necesito implementar un mecanismo de protección, ¿cuál es la mejor manera de hacerlo?¿Es la estructura del mapa go thread-safe?

Respuesta

14

Desea utilizar goroutines y sincronizar el acceso a sus mapas a través del channels. Explicación de the FAQ:

Después de una larga discusión, se decidió que el uso típico de mapas hizo no requiere un acceso seguro a partir de múltiples hilos, y en esos casos cuando lo hizo, el mapa fue probablemente parte de algunos datos más grande estructura o cómputo que ya estaba sincronizado. Por lo tanto, requerir que todas las operaciones de mapa tomar un mutex ralentizaría la mayoría de los programas y agregaría seguridad a unos pocos. Sin embargo, esta no fue una decisión fácil, ya que significa que acceso incontrolado a mapas puede bloquear el programa.

El idioma no excluye las actualizaciones del mapa atómico. Cuando sea necesario, como ya que al hospedar un programa que no es de confianza, la implementación podría acceder al mapa de enclavamiento.

+0

Es acertado, pero aún deben documentar y mantener qué funciones son seguras para hilos. A menudo me encuentro con un código en el que en el paso 1 llego a un mapa con valores y en el paso 2 lo leo de forma concurrente desde muchos hilos diferentes sin una sola sincronización. – Lothar

+0

Parece que el estilo Go no se compara con el uso del estado mutable compartido. Si simplemente lees el mapa de diferentes hilos, estarás bien. (Aunque esto no es necesario decirlo, existen implementaciones de mapas plausibles que están físicamente mutados en lecturas lógicas ...) – poolie

Cuestiones relacionadas