Skip to content

Instantly share code, notes, and snippets.

@johnshiver
Created April 19, 2018 22:06
Show Gist options
  • Select an option

  • Save johnshiver/6439daff1e03de8855d1f6cf8cda8890 to your computer and use it in GitHub Desktop.

Select an option

Save johnshiver/6439daff1e03de8855d1f6cf8cda8890 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
slower_ints := make(chan int, 10)
faster_ints := make(chan int, 10)
wg.Add(1)
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
slower_ints <- i
time.Sleep(time.Millisecond * 500)
}
}()
wg.Add(1)
go func() {
defer wg.Done()
for i := 0; i < 10000000; i++ {
faster_ints <- i
time.Sleep(time.Millisecond * 100)
}
}()
wg.Add(1)
go func() {
defer wg.Done()
ticker := time.NewTicker(time.Second * 5)
ticks := 0
for {
select {
case i := <-slower_ints:
fmt.Printf("\t\t\tgot my slow int %d\n", i)
go func(i int) {
time.Sleep(time.Second * 3)
fmt.Printf("\t\t\t\t\t\t\t\tFinished sleeping %d\n", i)
}(i)
case f := <-faster_ints:
fmt.Printf("got my fast int %d\n", f)
case <-ticker.C:
ticks += 1
fmt.Printf("\t\t\t\t\tI ticked again %d\n", ticks)
}
}
}()
wg.Wait()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment