Sobes.tech
Junior — Middle

Peut-on considérer une structure à deux champs comme sûre pour une utilisation en environnement multithread ?

sobes.tech IA

Réponse de l'IA

Une structure avec deux champs en Go n'est pas intrinsèquement thread-safe. Sans synchronisation supplémentaire, l'accès aux champs de la structure depuis plusieurs goroutines peut entraîner des conditions de course.

Si les champs de la structure ne changent pas après l'initialisation (c'est-à-dire que la structure est immuable), alors elle est sûre à lire depuis plusieurs threads.

Si les champs peuvent changer, il faut utiliser des mécanismes de synchronisation, comme sync.Mutex ou sync.RWMutex, pour assurer la sécurité.

Exemple avec 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
}

Ainsi, la structure elle-même ne garantit pas la sécurité, elle doit être protégée spécifiquement.