Sobes.tech
Junior — Middle

Ar galima laikyti saugia struktūrą su dviem laukais, naudojant ją daugiasraityje sąlygose?

sobes.tech AI

Atsakymas iš AI

Struktūra su dviem laukais Go kalboje pati savaime nėra srauto saugi. Be papildomos sinchronizacijos, prieiga prie struktūros laukų iš kelių gorutinų gali sukelti lenktynių sąlygas.

Jei struktūros laukų keitimas nevyksta po inicializacijos (t.y., struktūra yra nekintama), tada ji yra saugi skaityti iš kelių srautų.

Jei laukus galima keisti, norint užtikrinti saugumą, reikia naudoti sinchronizacijos mechanizmus, pvz., sync.Mutex arba sync.RWMutex.

Pavyzdys su 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
}

Taip, struktūra pati nesuteikia saugumo garantijos, ją reikia specialiai apsaugoti.