Sobes.tech
Senior

Semaphore deseni hakkında bana anlatır mısın?

sobes.tech yapay zeka

AI'dan gelen yanıt

Semaphore (semafor) deseni, aynı anda yürütülen işlemlerin sayısını veya bir kaynağa erişimi sınırlayan bir senkronizasyon mekanizmasıdır.

Go'da, semafor bir kanal kullanılarak uygulanabilir ve aynı anda kritik bölümü çalıştırabilecek goroutine sayısını sınırlar.

İşte Go'da basit bir semafor örneği:

package main

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

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

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(id int) {
			defer wg.Done()
			sem <- struct{}{} // semaforu edin
			fmt.Printf("Goroutine %d çalışmaya başladı\n", id)
			time.Sleep(1 * time.Second) // çalışma simülasyonu
			fmt.Printf("Goroutine %d çalışmayı bitirdi\n", id)
			<-sem // semaforu serbest bırak
		}(i)
	}

	wg.Wait()
}

Bu örnekte, aynı anda en fazla üç goroutine çalışabilir. Semaforlar, sınırlı kaynaklar (bağlantılar, dosyalar vb.) ile çalışma sırasında paralelliği sınırlandırmak için faydalıdır.