Junior — Middle
Kokias technikas žinote naudoti blokavimus ar kitus mechanizmus, kad išvengtumėte vienalaikės prieigos prie duomenų?
sobes.tech AI
Atsakymas iš AI
Pagrindinės technikos, skirtos išvengti vienalaikio duomenų prieigos Go:
- Mutex (sync.Mutex): kritinės sekcijos užrakinimas, kad tik vienas srautas galėtų dirbti su duomenimis.
var mu sync.Mutex
mu.Lock()
// darbas su bendrais duomenimis
mu.Unlock()
-
RWMutex (sync.RWMutex): leidžia keliems skaitytojams vienu metu skaityti duomenis, bet blokuoja rašymą.
-
Kanalai (channels): duomenų perdavimas tarp gorutinų, kas leidžia išvengti tiesioginio prieigos prie bendrų duomenų.
-
Atominės operacijos (sync/atomic): paprastoms operacijoms su kintamaisiais be pilno užrakinimo.
-
sync.Once: duomenų vienkartiniam inicializavimui.
Mechanizmo pasirinkimas priklauso nuo užduoties: paprastam tarpusavio išimčiai — Mutex, skaitymo ir rašymo atskyrimui — RWMutex, žinučių perdavimui — kanalai.