mirror of
https://github.com/crazybber/awesome-patterns.git
synced 2025-02-16 13:43:13 +03:00
example for david with sem + iterator
This commit is contained in:
parent
f5bf6c88bb
commit
5d9d262a26
45
concurrency/iterator_sem/main.go
Normal file
45
concurrency/iterator_sem/main.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math/rand"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
generator := func() <-chan int {
|
||||||
|
totalIteration := 30
|
||||||
|
wg := &sync.WaitGroup{}
|
||||||
|
wg.Add(totalIteration)
|
||||||
|
concurrentCount := 20
|
||||||
|
sem := make(chan bool, concurrentCount)
|
||||||
|
defer close(sem)
|
||||||
|
results := make(chan int, totalIteration)
|
||||||
|
defer close(results)
|
||||||
|
for i := 0; i < totalIteration; i++ {
|
||||||
|
sem <- true
|
||||||
|
go func(i int) {
|
||||||
|
results <- generateNumber()
|
||||||
|
<-sem
|
||||||
|
wg.Done()
|
||||||
|
}(i)
|
||||||
|
}
|
||||||
|
wg.Wait()
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
|
||||||
|
results := generator()
|
||||||
|
for r := range results {
|
||||||
|
fmt.Println(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("Finished!!!")
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateNumber() int {
|
||||||
|
rand.Seed(time.Now().Unix())
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
return rand.Intn(10000)
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user