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.