Sobes.tech
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.