Junior — Middle
Mi a szerepe a szemafor mechanizmusnak a több szálas programozásban?
sobes.tech MI
Válasz az MI-től
Egy szeminárium a több szálú programozásban a közös erőforrásokhoz való hozzáférés kezelésére szolgál, korlátozva az egyidejűleg használható szálak számát. Egy számlálót tartalmaz, amely csökken az erőforrás elfoglalásakor és növekszik az felszabadításakor. Ha a számláló nulla, az új szálak blokkolva vannak, amíg az erőforrás felszabadul.
Példa Go nyelven, csatornát használva szemináriumként:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // szeminárium maximális számlálóval
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // erőforrás megszerzése
fmt.Printf("Goroutine %d elkezdte a munkát\n", id)
// munka szimuláció
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d befejezte a munkát\n", id)
<-sem // erőforrás felszabadítása
}(i)
}
wg.Wait()
}
Így a szeminárium segít ellenőrizni a párhuzamos hozzáférést és megelőzni a versenyhelyzeteket és az erőforrások túlterhelését.