Junior — Middle
Kāda ir semafora mehānisma funkcija daudzprocesuālajā programmēšanā?
sobes.tech AI
Atbilde no AI
Semafors daudzšūnu programmēšanā tiek izmantots kopīgu resursu piekļuves pārvaldībai, ierobežojot šūnu skaitu, kas vienlaikus var izmantot šo resursu. Tas glabā skaitītāju, kas samazinās, kad resursu iegūst, un palielinās, kad tas tiek atbrīvots. Ja skaitītājs ir nulle, jaunas šūnas tiek bloķētas līdz resursa atbrīvošanai.
Piemērs Go valodā, izmantojot kanālu kā semaforu:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
sem := make(chan struct{}, 3) // semafors ar maksimālo skaitītāju 3
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // resursa iegūšana
fmt.Printf("Goroutine %d sāka darbu\n", id)
// darba simulācija
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d pabeidza darbu\n", id)
<-sem // resursa atbrīvošana
}(i)
}
wg.Wait()
}
Šādi semafors palīdz kontrolēt konkurējošo piekļuvi un novērst sacensību apstākļus un resursu pārslogojumu.