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.