Junior — Middle
Mis on semafori mehhanismi eesmärk mitme lõime programmeerimisel?
sobes.tech AI
Vastus AI-lt
Mitme niidiga programmeerimises kasutatakse semaforit ühiste ressursside juurdepääsu juhtimiseks, piirates niitide arvu, mis saavad seda ressurssi samaaegselt kasutada. See hoiab kontot, mis väheneb, kui ressurss on haaratud, ja suureneb, kui see vabastatakse. Kui kontor on null, blokeeritakse uued niidid kuni ressurss vabastatakse.
Näide Go keeles, kasutades kanalit semaforina:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // semafor maksimaalse kontoga 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // ressurss haaramine
fmt.Printf("Goroutine %d hakkas tööle\n", id)
// töö simulatsioon
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d lõpetas töö\n", id)
<-sem // ressurss vabastamine
}(i)
}
wg.Wait()
}
Sellisel viisil aitab semafor kontrollida konkurentsivõimelist juurdepääsu ning ennetada võistlusolukordi ja ressursside ülekoormust.