Junior — Middle
Көп жиптүү программалоодо семафор механизмининин максаты эмне?
sobes.tech AI
AIден жооп
Көп иштөө программалоо учурда жалпы ресурстарга кирүүнү башкаруу үчүн семафор колдонулат, ал бир убакта ушул ресурсты колдонуп жаткан жиптердин санын чектейт. Ал эсептегичти сактайт, ал ресурсты алуу учурунда азаяды жана бошотулганда көбөйөт. Эсептегич нөлгө барабар болсо, жаңы жиптер ресурсту бошотконго чейин блоктолот.
Go тилинде каналды семафор катары колдонуу мисалы:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 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()
}
Мындайча айтканда, семафор бир убакта кирүүнү көзөмөлдөөгө жардам берет жана жарыш шарттарын жана ресурстардын ашыкча жүктөлүшүн алдын алат.