Golang Sync

Golang Sync
Golang Sync -pakken gir synkroniseringsprimitiver, for eksempel mutex, ventegruppe, basseng, les og skriv mutex og tilstandsvariabler.

La oss utforske noen funksjoner som er gitt i denne artikkelen.

Golang mutex

Synkroniseringen.MUTEX gir en mutex -primitiv, som gir mulighet for gjensidige unntak for delte ressurser som forhindrer raseforhold.

Eksempelbruk:

pakkehoved
Importer "Synkronisering"
func main ()
var i = 10
mutex: = & synkronisering.Mutex
mutex.Låse()
// bare en goroutine har tilgang til denne koden om gangen
Jeg++
mutex.Låse opp()

Les/skriv mutex

Synkroniseringen.RWMUTEX gir en leser/skribent mutex. Den tilbyr lignende metoder som en primitiv mutex, men kan tillate samtidig avlesninger ved bruk av Rlock og Runlock -metoder:

var i = 10
mutex: = & synkronisering.Rwmutex
mutex.Låse()
// bare en goroutine har tilgang til denne koden om gangen
Jeg++
mutex.Låse opp()
mutex.Rlock ()
i ++ // samtidig leser
mutex.Runlock ()

Det forrige eksemplet kan tillate over en goroutine å lese koden. I motsetning til synkronisering.Mutex, som tillater nøyaktig en leser og en forfatter om gangen.

Waitgroups

Synkroniseringen.WaitGroup brukes til å tilby en blokkeringsmekanisme for goroutines. Ved hjelp av en ventegruppe kan du blokkere utførelsen av en funksjon til alle goroutiner er ferdig med utførelse.

Det fungerer ved å lage en teller som holder antall goroutines å vente. Når en goroutine er fullført, synker telleren med 1. Når telleren er 0, fjerner ventegruppen utførelsen.

For å tilføre en verdi til WaitGroup -telleren, kan vi bruke ADD () -metoden, som tar en heltallverdi.

For å fjerne en goroutine fra disken etter fullføring, bruker vi Done Done () -metoden. For eksempel:

pakkehoved
import (
"FMT"
"Synkronisering"
)
func main ()
WG: = & synkronisering.WaitGroup
for i: = 0; Jeg < 5; i++
wg.Legg til (1)
gå func (x int)
fmt.Printf ("Arbeider: %d Running \ n", x)
wg.Gjort ()
(Jeg)

wg.Vente()

I forrige eksempel øker vi verdien av ventegruppetelleren med 1 gjennom bruk av add () -funksjonen.

Når en goroutine er fullført, reduserer vi telleren med 1 ved hjelp av Done () -metoden. Den forrige koden skal returnere utdataene som:

Arbeider: 4 Løping
Arbeider: 2 Løping
Arbeider: 1 Løping
Arbeider: 3 Løping
Arbeider: 0 løpende

En gang

Synkroniseringen.En gang primitiv sikrer at en funksjon bare kjøres en gang. Et eksempel er som vist nedenfor:

var en gang synkronisert.En gang
RunOnce: = func ()
fmt.Println ("Kjør en gang")

Ferdig: = Make (Chan String)
for i: = 0; Jeg < 5; i++
gå func ()
en gang.Do (runOnce)
Ferdig <- "Hi"
()

for i: = 0; Jeg < 5; i++
<-done

Konklusjon

Denne guiden dekker noen grunnleggende og grunnleggende primitiver levert av Go Sync -pakken. I tillegg ble synkroniseringsprimitiver, som mutex, ventegruppe, basseng, lese og skrive mutex og tilstandsvariabler, diskutert. Vi håper du fant denne artikkelen nyttig. Sjekk ut andre Linux -hint -artikler for flere tips og opplæringsprogrammer.