Go: Processos e Concorrência
De Aulas
Revisão de 17h33min de 1 de outubro de 2021 por Admin (discussão | contribs) (Criou página com 'Afluentes: Sistemas Distribuídos e Mobile = Subprocessos = <syntaxhighlight lang=go line> package main import ( "fmt" "math/rand" "sync" "time" ) func child(wg *s...')
Afluentes: Sistemas Distribuídos e Mobile
Subprocessos
1package main
2
3import (
4 "fmt"
5 "math/rand"
6 "sync"
7 "time"
8)
9
10func child(wg *sync.WaitGroup) {
11 defer wg.Done() // decrementa o contador de processo
12 fmt.Println("Luke: Noooooo.....") // imprime na tela
13 for i := 0; i < 5; i++ { // executa o laço 5 vezes
14 fmt.Println("Luke: No!") // imprime n a tela
15 d := rand.Intn(2000) // retorna um número randômico de 0 a 1999
16 time.Sleep(time.Duration(d) * time.Millisecond) // aguarda um tempo
17 }
18 fmt.Println("Luke Skywalker falls.") // imprime na tela
19}
20
21func main() {
22 var wg sync.WaitGroup // wg é tilizado para sincronizar os processos
23 wg.Add(1) // incrementa o contador de processos
24 go child(&wg) // chama a rotina child paralelamente
25 fmt.Println("Vader: Luke! I am your father...") // imprime na tela
26 for i := 0; i < 5; i++ { // executa o laço 5 vezes
27 fmt.Println("Vader: Yes!") // imprime na tela
28 d := rand.Intn(2000) // retorna um número randômico de 0 a 1999
29 time.Sleep(time.Duration(d) * time.Millisecond) // aguarda um tempo
30 }
31 wg.Wait() // aguarda os subprocessos terminarem
32 fmt.Println("Dart Vader leaves.") // imprime na tela
33}