Junior — Middle
Aký je účel mechanizmu semafora v viacvláknovom programovaní?
sobes.tech AI
Odpoveď od AI
Semafor v viacvláknovom programovaní sa používa na riadenie prístupu ku zdieľaným zdrojom, obmedzovaním počtu vlákien, ktoré môžu súčasne používať tento zdroj. Uchováva čítač, ktorý sa znižuje pri získaní zdroja a zvyšuje pri jeho uvoľnení. Ak je čítač nulový, nové vlákna sú blokované, kým sa zdroj neuvoľní.
Príklad v Go s použitím kanála ako semaforu:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // semafor s maximálnym čítačom 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // získanie zdroja
fmt.Printf("Goroutine %d začala pracovať\n", id)
// simulácia práce
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d ukončila prácu\n", id)
<-sem // uvoľnenie zdroja
}(i)
}
wg.Wait()
}
Týmto spôsobom semafor pomáha kontrolovať súbežný prístup a zabraňuje podmienkam súťaže a preťaženiu zdrojov.