Sobes.tech
Junior — Middle

Lze považovat strukturu se dvěma poli za bezpečnou pro použití v vícevláknových podmínkách?

sobes.tech AI

Odpověď od AI

Struktura se dvěma poli v jazyce Go sama o sobě není vlákny bezpečná. Bez dodatečné synchronizace může přístup k polím struktury z více gorutin vést ke stavu závodu.

Pokud se pole struktury nemění po inicializaci (tedy je neměnná), je bezpečná pro čtení z více vláken.

Pokud se pole mohou měnit, je třeba použít mechanismy synchronizace, například sync.Mutex nebo sync.RWMutex, k zajištění bezpečnosti.

Příklad s mutexem:

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
}

Tímto způsobem sama struktura nezaručuje bezpečnost, je třeba ji speciálně chránit.