Sobes.tech
Junior — Middle

Biztonságosnak tekinthető-e két mezővel rendelkező szerkezet több szálas környezetben való használatra?

sobes.tech MI

Válasz az MI-től

A két mezőt tartalmazó struktúra Go-ban önmagában nem szálbiztos. További szinkronizáció nélkül a struktúra mezőihez való hozzáférés több goroutine-ból versenyhelyzeteket okozhat.

Ha a struktúra mezői az inicializálás után nem változnak (azaz, a struktúra változatlan), akkor több szálról olvasásra biztonságos.

Ha azonban a mezők változhatnak, akkor a biztonság érdekében szinkronizációs mechanizmusokat kell használni, például sync.Mutex vagy sync.RWMutex.

Mutex példával:

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
}

Így a struktúra maga nem garantálja a biztonságot, azt külön kell védeni.