Sobes.tech
Junior — Middle

È possibile considerare sicura una struttura con due campi per l'uso in condizioni multithread?

sobes.tech AI

Risposta dell'AI

Una struttura con due campi in Go di per sé non è sicura per l'accesso concorrente. Senza sincronizzazione aggiuntiva, l'accesso ai campi della struttura da più goroutine può portare a condizioni di gara.

Se i campi della struttura non cambiano dopo l'inizializzazione (cioè, la struttura è immutabile), allora è sicura da leggere da più thread.

Se invece i campi possono cambiare, per garantire la sicurezza bisogna usare meccanismi di sincronizzazione come sync.Mutex o sync.RWMutex.

Esempio 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
}

In questo modo, la struttura stessa non garantisce la sicurezza, deve essere protetta specificamente.