Sobes.tech
Senior

Semaphore naqshini haqida gapirib bering.

sobes.tech AI

AIdan javob

Semaphore (semafor) naqshoni, sinxronizatsiya mexanizmi bo‘lib, u bir vaqtning o‘zida bajariladigan operatsiyalar sonini yoki resursga kirishni cheklaydi.

Go tilida, semaphore kanal yordamida amalga oshirilishi mumkin, bu esa bir vaqtning o‘zida kritik bo‘limni bajarishi mumkin bo‘lgan gorutinalar sonini cheklaydi.

Go tilida oddiy semaphore misoli:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	sem := make(chan struct{}, 3) // 3 ta imkoniyatga ega semaphore
	var wg sync.WaitGroup

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

	wg.Wait()
}

Ushbu misolda, bir vaqtning o‘zida faqat uchta gorutina ish olib borishi mumkin. Semaphore, masalan, cheklangan resurslar bilan ishlashda (ulanishlar, fayllar va boshqalar) parallelizmni cheklash uchun foydalidir.