Sobes.tech
Junior — Middle

Vai var uzskatīt par drošu struktūru ar diviem laukiem, izmantojot to daudzšūnu apstākļos?

sobes.tech AI

Atbilde no AI

Struktūra ar diviem laukiem Go valodā pati par sevi nav pavedienu droša. Bez papildu sinhronizācijas piekļuve struktūras laukiem no vairākiem gorutīniem var novest pie sacensību stāvokļiem.

Ja struktūras lauki nemainās pēc inicializācijas (t.i., struktūra ir nemainīga), tad tā ir droša lasīšanai no vairākiem pavedieniem.

Ja lauki var mainīties, drošības nodrošināšanai ir jāizmanto sinhronizācijas mehānismi, piemēram, sync.Mutex vai sync.RWMutex.

Piemērs ar 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
}

Tādējādi, pati struktūra nesniedz drošības garantiju, to ir jāaizsargā īpaši.