Sobes.tech
Junior — Middle

Çox ipli proqramlaşdırmada semafor mexanizminin məqsədi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Çox iptali proqramlaşdırmada semafor ümumi resurslara girişin idarə olunması üçün istifadə olunur və eyni zamanda bu resursu istifadə edə biləcək ipların sayını məhdudlaşdırır. O, sayğac saxlayır, resurs əldə ediləndə azaldılır və sərbəst buraxıldıqda artırılır. Əgər sayğac sıfırdırsa, yeni iplar resurs sərbəst buraxılana qədər bloklanır.

Go dilində kanal istifadə edərək semafor nümunəsi:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    sem := make(chan struct{}, 3) // maksimum sayğac ilə semafor

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(id int) {
            defer wg.Done()
            sem <- struct{}{} // resursu əldə et
            fmt.Printf("Goroutine %d işləməyə başladı\n", id)
            // işin simulyasiyası
            // time.Sleep(time.Second)
            fmt.Printf("Goroutine %d işləməyi bitirdi\n", id)
            <-sem // resursu sərbəst burax
        }(i)
    }

    wg.Wait()
}

Bu şəkildə, semafor eyni zamanda girişləri idarə etməyə və yarış şəraitlərini və resursların çox yüklənməsini qarşısını almağa kömək edir.