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()
}

ამ გზით, სემაფორი ეხმარება კონკურენტული წვდომის კონტროლში და თავიდან ავიცილოთ რბოლა და რესურსების გადატვირთვა.