Junior — Middle
Cum se pot elimina condițiile de cursă care apar la accesul simultan la resurse într-un mediu multithread?
sobes.tech AI
Răspuns de la AI
Pentru a evita condițiile de cursă în mediul multithread în Go, se pot folosi mai multe abordări:
-
Mutex-uri (sync.Mutex) — blochează accesul la resursele partajate, permițând doar unei goroutine să lucreze cu ele într-un moment dat.
-
Canale (channels) — permit organizarea unui schimb sigur de date între goroutine-uri, evitând accesul direct la variabilele comune.
-
Pachetul sync/atomic — oferă operații atomice pentru lucrul cu tipuri primitive, ajutând la evitarea condițiilor de cursă în operații simple.
Exemplu cu mutex:
import (
"sync"
)
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
Utilizarea canalelor:
ch := make(chan int)
func worker() {
for val := range ch {
// procesarea valorii
}
}
func main() {
go worker()
ch <- 42
close(ch)
}
Alegerea metodei depinde de sarcina specifică și de structura programului.