Sobes.tech
Junior — Middle

¿Se puede considerar segura una estructura con dos campos para su uso en condiciones multihilo?

sobes.tech AI

Respuesta de la IA

Una estructura con dos campos en Go por sí misma no es segura para el acceso concurrente. Sin sincronización adicional, el acceso a los campos de la estructura desde múltiples goroutines puede conducir a condiciones de carrera.

Si los campos de la estructura no cambian después de la inicialización (es decir, la estructura es inmutable), entonces es segura para leer desde múltiples hilos.

Si los campos pueden cambiar, entonces para garantizar la seguridad se deben usar mecanismos de sincronización, como sync.Mutex o sync.RWMutex.

Ejemplo con mutex:

import "sync"

type SafeStruct struct {
    mu sync.Mutex
    field1 int
    field2 string
}

func (s *SafeStruct) Set(field1 int, field2 string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.field1 = field1
    s.field2 = field2
}

func (s *SafeStruct) Get() (int, string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    return s.field1, s.field2
}

De esta manera, la estructura en sí no garantiza la seguridad, sino que debe protegerse específicamente.