Sobes.tech
Senior

Semaphore үлгүсү жөнүндө айтып бер.

sobes.tech AI

AIден жооп

Семафор үлгісі — бул синхрондоштуруу механизми, ал бир убакта ишке ашырылып жаткан операциялардын санын же ресурска кирүүнү чектейт.

Go тилинде, семафор канал аркылуу ишке ашырылат жана бир убакта критикалык бөлүмдү аткара турган горутиндардын санын чектейт.

Жөнөкөй семафордун мисалы Goда:

package main

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

func main() {
	sem := make(chan struct{}, 3) // 3 мүмкүнчүлүгү бар семафор
	var wg sync.WaitGroup

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(id int) {
			defer wg.Done()
			sem <- struct{}{} // семафорду алуу
			fmt.Printf("Goroutine %d ишке кирди\n", id)
			time.Sleep(1 * time.Second) // иштин имитациясы
			fmt.Printf("Goroutine %d ишти аяктады\n", id)
			<-sem // семафорду бошотуу
		}(i)
	}

	wg.Wait()
}

Бул мисалда, бир убакта эң көп үч горутин иштей алат. Семафор параллелизмди чектөө үчүн пайдалуу, мисалы, чектелген ресурстар менен иштөөдө (байланыштар, файлдар жана башка).