Sobes.tech
Junior — Middle

Poate fi considerată sigură o structură cu două câmpuri pentru utilizarea în condiții multithread?

sobes.tech AI

Răspuns de la AI

O structură cu două câmpuri în Go nu este sigură pentru concurență de una singură. Fără sincronizare suplimentară, accesul la câmpurile structurii din mai multe goroutines poate duce la condiții de cursă.

Dacă câmpurile structurii nu se schimbă după inițializare (adică, structura este imutabilă), atunci este sigură pentru citire din mai multe fire.

Dacă însă câmpurile pot fi modificate, pentru a asigura siguranța trebuie utilizate mecanisme de sincronizare, cum ar fi sync.Mutex sau sync.RWMutex.

Exemplu cu 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
}

Astfel, structura în sine nu garantează siguranța, ea trebuie protejată în mod special.