Junior — Middle
Ի՞նչ է սեմաֆոր մեխանիզմի նշանակությունը բազմատող ծրագրավորման մեջ։
sobes.tech AI
Պատասխան AI-ից
Սեմաֆորն բազմաբնույթ ծրագրավորման մեջ օգտագործվում է ընդհանուր ռեսուրսների մուտքը կառավարելու համար՝ սահմանափակելով միաժամանակ այդ ռեսուրսը օգտագործող թելերի քանակը։ Այն պահում է հաշվիչ, որը նվազում է ռեսուրսը գրավելու ժամանակ և ավելանում՝ ազատելու ժամանակ։ Եթե հաշվիչը զրոյական է, նոր թելերը բլոկվում են մինչև ռեսուրսը ազատվի։
Օրինակ Go-ում, օգտագործելով ալիք որպես սեմաֆոր՝
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // սեմաֆոր՝ առավելագույն հաշվիչով 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // ռեսուրսի ձեռքբերում
fmt.Printf("Goroutine %d սկսել է աշխատել\n", id)
// աշխատանքային սիմուլացիա
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d ավարտեց աշխատանքը\n", id)
<-sem // ռեսուրսի ազատում
}(i)
}
wg.Wait()
}
Այսպիսով, սեմաֆորը օգնում է վերահսկել համաժամանակյա մուտքը և կանխել մրցակցության պայմանները և ռեսուրսների գերբեռնվածությունը։