Junior — Middle
Koja je svrha mehanizma semafora u višestrukom programiranju?
sobes.tech АИ
Одговор од АИ
Semafor u višestrukom programiranju koristi se za upravljanje pristupom zajedničkim resursima, ograničavajući broj niti koje mogu istovremeno koristiti taj resurs. Čuva brojač koji se smanjuje prilikom preuzimanja resursa i povećava prilikom oslobađanja. Ako je brojač nula, nove niti se blokiraju dok se resurs ne oslobodi.
Primer u Go koristeći kanal kao semafor:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // semafor sa maksimalnim brojem 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // preuzimanje resursa
fmt.Printf("Goroutine %d je počela sa radom\n", i)
// simulacija rada
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d je završila sa radom\n", i)
<-sem // oslobađanje resursa
}(i)
}
wg.Wait()
}
Na ovaj način, semafor pomaže u kontroli konkurentnog pristupa i sprečava uslove trke i preopterećenje resursa.