Sobes.tech
Junior — Middle

Ko'p ipli dasturlashda semafor mexanizmining vazifasi nima?

sobes.tech AI

AIdan javob

Bir semafor ko'p iptali dasturlashda umumiy resurslarga kirishni boshqarish uchun ishlatiladi, bu esa bir vaqtning o'zida ushbu resursdan foydalanishi mumkin bo'lgan iplar sonini cheklaydi. U hisoblagichni saqlaydi, u resursni egallashda kamayadi va bo'shatishda oshadi. Agar hisoblagich nolga teng bo'lsa, yangi iplar resurs bo'shatilguncha bloklanadi.

Go tilida kanalni semafor sifatida ishlatish misoli:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // maksimal hisoblagich bilan semafor

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            sem <- struct{}{} // resursni egallash
            fmt.Printf("Goroutine %d ish boshladi\n", id)
            // ishni simulyatsiya qilish
            // time.Sleep(time.Second)
            fmt.Printf("Goroutine %d ishni tugatdi\n", id)
            <-sem // resursni bo'shatish
        }(i)
    }

    wg.Wait()
}

Shu tarzda, semafor bir vaqtning o'zida kirishni nazorat qilishga yordam beradi va raqiblik sharoitlari va resurslarning ortiqcha yuklanishini oldini oladi.