Sobes.tech
Junior — Middle

Kan een structuur met twee velden als veilig worden beschouwd voor gebruik in multithread-omstandigheden?

sobes.tech AI

Antwoord van AI

Een structuur met twee velden in Go is op zichzelf niet thread-safe. Zonder aanvullende synchronisatie kan toegang tot de velden van de structuur vanuit meerdere goroutines leiden tot racecondities.

Als de velden van de structuur na initialisatie niet veranderen (d.w.z. de structuur is onveranderlijk), dan is het veilig om ervan te lezen vanuit meerdere threads.

Als de velden kunnen veranderen, moet je synchronisemechanismen gebruiken, zoals sync.Mutex of sync.RWMutex, om de veiligheid te garanderen.

Voorbeeld met 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
}

Op deze manier garandeert de structuur zelf geen veiligheid, het moet specifiek worden beschermd.