Sobes.tech
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()
}

Այսպիսով, սեմաֆորը օգնում է վերահսկել համաժամանակյա մուտքը և կանխել մրցակցության պայմանները և ռեսուրսների գերբեռնվածությունը։