Sobes.tech
Junior — Middle

Je možné považovať štruktúru so dvoma poľami za bezpečnú na použitie v podmienkach viacvláknového prostredia?

sobes.tech AI

Odpoveď od AI

Štruktúra s dvoma poľami v Go sama o sebe nie je vlákno bezpečná. Bez dodatočnej synchronizácie môže prístup k poľám štruktúry z viacerých gorútín viesť k podmienkam pretekania.

Ak sa polia štruktúry nemenia po inicializácii (t.j. štruktúra je nemenná), je bezpečná na čítanie z viacerých vlákien.

Ak sa polia môžu meniť, na zabezpečenie bezpečnosti je potrebné použiť mechanizmy synchronizácie, ako je sync.Mutex alebo sync.RWMutex.

Príklad s mutexom:

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
}

Takto samotná štruktúra nezaručuje bezpečnosť, musí byť špeciálne chránená.