Sobes.tech
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:

  1. Mutex-uri (sync.Mutex) — blochează accesul la resursele partajate, permițând doar unei goroutine să lucreze cu ele într-un moment dat.

  2. Canale (channels) — permit organizarea unui schimb sigur de date între goroutine-uri, evitând accesul direct la variabilele comune.

  3. 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.