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.