Sobes.tech
Junior — Middle

Mi a szerepe a szemafor mechanizmusnak a több szálas programozásban?

sobes.tech MI

Válasz az MI-től

Egy szeminárium a több szálú programozásban a közös erőforrásokhoz való hozzáférés kezelésére szolgál, korlátozva az egyidejűleg használható szálak számát. Egy számlálót tartalmaz, amely csökken az erőforrás elfoglalásakor és növekszik az felszabadításakor. Ha a számláló nulla, az új szálak blokkolva vannak, amíg az erőforrás felszabadul.

Példa Go nyelven, csatornát használva szemináriumként:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // szeminárium maximális számlálóval

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            sem <- struct{}{} // erőforrás megszerzése
            fmt.Printf("Goroutine %d elkezdte a munkát\n", id)
            // munka szimuláció
            // time.Sleep(time.Second)
            fmt.Printf("Goroutine %d befejezte a munkát\n", id)
            <-sem // erőforrás felszabadítása
        }(i)
    }

    wg.Wait()
}

Így a szeminárium segít ellenőrizni a párhuzamos hozzáférést és megelőzni a versenyhelyzeteket és az erőforrások túlterhelését.