Sobes.tech
Junior — Middle

Koja je svrha mehanizma semafora u višestrukom programiranju?

sobes.tech АИ

Одговор од АИ

Semafor u višestrukom programiranju koristi se za upravljanje pristupom zajedničkim resursima, ograničavajući broj niti koje mogu istovremeno koristiti taj resurs. Čuva brojač koji se smanjuje prilikom preuzimanja resursa i povećava prilikom oslobađanja. Ako je brojač nula, nove niti se blokiraju dok se resurs ne oslobodi.

Primer u Go koristeći kanal kao semafor:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // semafor sa maksimalnim brojem 3

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            sem <- struct{}{} // preuzimanje resursa
            fmt.Printf("Goroutine %d je počela sa radom\n", i)
            // simulacija rada
            // time.Sleep(time.Second)
            fmt.Printf("Goroutine %d je završila sa radom\n", i)
            <-sem // oslobađanje resursa
        }(i)
    }

    wg.Wait()
}

Na ovaj način, semafor pomaže u kontroli konkurentnog pristupa i sprečava uslove trke i preopterećenje resursa.