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.