Junior — Middle
Çok iş parçacıklı programlamada semafor mekanizmasının amacı nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Çok iş parçacıklı programlamada semafor, ortak kaynaklara erişimi yönetmek için kullanılır ve aynı anda bu kaynağı kullanabilecek iş parçacığı sayısını sınırlar. Bir sayaç tutar, kaynak alındığında azalır ve serbest bırakıldığında artar. Sayaç sıfırsa, yeni iş parçacıkları kaynak serbest bırakılana kadar engellenir.
Go dilinde kanal kullanarak semafor örneği:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // maksimum sayaç 3 olan semafor
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // kaynağı edin
fmt.Printf("Goroutine %d çalışmaya başladı\n", id)
// çalışma simülasyonu
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d çalışma tamamlandı\n", id)
<-sem // kaynağı serbest bırak
}(i)
}
wg.Wait()
}
Bu şekilde, semafor eşzamanlı erişimi kontrol etmeye ve yarış koşullarını ve kaynak aşımını önlemeye yardımcı olur.