Sobes.tech
Senior

Pastāsti man par Semaphore paraugu.

sobes.tech AI

Atbilde no AI

Semaphore (semaforu) ir modelis ir sinhronizācijas mehānisms, kas ierobežo vienlaicīgi izpildāmo operāciju skaitu vai piekļuvi resursam.

Go valodā semaphore var realizēt ar kanāla palīdzību, ierobežojot gorutīnu skaitu, kas vienlaicīgi var izpildīt kritisko sekciju.

Vienkāršs semaphore piemērs Go:

package main

import (
	"fmt"
	"sync"
	"time"
)

func main() {
	sem := make(chan struct{}, 3) // semaphore ar kapacitāti 3
	var wg sync.WaitGroup

	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(id int) {
			defer wg.Done()
			sem <- struct{}{} // semafora iegūšana
			fmt.Printf("Gorutina %d sāka darbu\n", id)
			time.Sleep(1 * time.Second) // darba simulācija
			fmt.Printf("Gorutina %d pabeidza darbu\n", id)
			<-sem // semafora atbrīvošana
		}(i)
	}

	wg.Wait()
}

Šajā piemērā vienlaicīgi var strādāt ne vairāk kā trīs gorutinas. Semafors ir noderīgs paralēlismu ierobežošanai, piemēram, strādājot ar ierobežotiem resursiem (savienojumiem, failiem utt.).