¿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
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.
- 1. ¿Es java.util.concurrent.Future threadsafe?
- 2. ¿Es EPiServer threadsafe?
- 3. ¿Es Ruby's Net :: HTTP threadsafe?
- 4. Parcialmente JSON unmarshal en un mapa en Go
- 5. ¿Puedo definir un mapa cuya clave es una estructura?
- 6. @GuardedBy, @ThreadSafe, @ NotThreadSafe
- 7. ¿Cómo creo un string de mapa [[16]] [] en Go?
- 8. ¿Cómo se define threadsafe?
- 9. Threadsafe vs re-entrant
- 10. python threadsafe object cache
- 11. Go - ¿Cuál es el equivalente del "pase" de Python?
- 12. ¿Cuál es el punto del tipo de división en Go?
- 13. ¿El boost :: interprocess threadsafe?
- 14. La propiedad ConcurrentDictionary Keys o Values threadsafe
- 15. ¿Qué significa threadsafe?
- 16. un mapa con estructura anidada compleja
- 17. Mapa de la estructura de datos de Maps
- 18. ¿Es posible visualizar la estructura en árbol del código Java?
- 19. cuál es la estructura interna correcta del archivo JAR
- 20. ¿Cómo cambiar la estructura del mapa de MongoDB, reducir los resultados?
- 21. ¿Es estable la segunda parte del mapa <..,..>?
- 22. ¿Es una propiedad de cadena en sí misma threadsafe?
- 23. Python: es os.read()/os.write() en un os.pipe() threadsafe?
- 24. ¿Es una consulta de linq para ConcurrentDictionary Values threadsafe?
- 25. C++ std :: pregunta del mapa sobre la orden del iterador
- 26. Mejor estructura de la estructura del proyecto web de Java
- 27. Go, go get, go install, paquetes locales y control de versión
- 28. Fusionar mapas en Go
- 29. Sizeof struct in Go
- 30. ¿Es posible imitar la interfaz Go en C/C++?
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
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