Skip to content

Commit

Permalink
Cap. 20 – Exercícios: Nível #9 – 3
Browse files Browse the repository at this point in the history
https://www.youtube.com/watch?v=cCWvFijhObU&list=PLCKpcjBB_VlBsxJ9IseNxFllf-UFEXOdg&index=141&ab_channel=AprendaGo
Cap. 20 – Exercícios: Nível #9 – 3
 Utilizando goroutines, crie um programa incrementador:
    - Tenha uma variável com o valor da contagem
    - Crie um monte de goroutines, onde cada uma deve:
        - Ler o valor do contador
        - Salvar este valor
        - Fazer yield da thread com runtime.Gosched()
        - Incrementar o valor salvo
        - Copiar o novo valor para a variável inicial
    - Utilize WaitGroups para que seu programa não finalize antes de suas goroutines.
    - Demonstre que há uma condição de corrida utilizando a flag -race
  • Loading branch information
wfrsilva committed Jun 13, 2022
1 parent 57d9973 commit 9b2fca9
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions codigo/20_Exercicios_Nivel_9/9-3/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/* https://www.youtube.com/watch?v=cCWvFijhObU&list=PLCKpcjBB_VlBsxJ9IseNxFllf-UFEXOdg&index=141&ab_channel=AprendaGo
Cap. 20 – Exercícios: Nível #9 – 3
Utilizando goroutines, crie um programa incrementador:
- Tenha uma variável com o valor da contagem
- Crie um monte de goroutines, onde cada uma deve:
- Ler o valor do contador
- Salvar este valor
- Fazer yield da thread com runtime.Gosched()
- Incrementar o valor salvo
- Copiar o novo valor para a variável inicial
- Utilize WaitGroups para que seu programa não finalize antes de suas goroutines.
- Demonstre que há uma condição de corrida utilizando a flag -race
Cap. 20 – Exercícios: Nível #9 – 3
https://go.dev/play/p/fszW57eD0UM */
package main

import (
"fmt"
"runtime"
"sync"
)

var wg sync.WaitGroup
var contador int

const quantidadeGoroutines = 100

func main() {
criarGoroutines(quantidadeGoroutines)
wg.Wait()

fmt.Println("Total Goroutines:\t", quantidadeGoroutines, "\nTotal contador:\t\t", contador)
}

func criarGoroutines(i int) {
wg.Add(i)
for j := 0; j < i; j++ {
go func() {
v := contador
runtime.Gosched()
v++
contador = v
wg.Done()
}()
}
}

0 comments on commit 9b2fca9

Please sign in to comment.