1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package main
- import (
- "fmt"
- "math/rand"
- )
- func RunSim(name string, steps int) <-chan int {
- spikechan := make(chan int)
- go func() {
- defer close(spikechan)
- for t := 0; t < steps; t++ {
- if rand.Float32() > 0.8 {
- spikechan <- t
- }
- }
- return
- }()
- return spikechan
- }
- func main() {
- a := RunSim("A", 100)
- b := RunSim("B", 100)
- c := RunSim("C", 100)
- for {
- select {
- case ta, ok := <-a:
- if ok {
- fmt.Printf("A spiked at %d\n", ta)
- } else {
- a = nil
- }
- case tb, ok := <-b:
- if ok {
- fmt.Printf("B spiked at %d\n", tb)
- } else {
- b = nil
- }
- case tc, ok := <-c:
- if ok {
- fmt.Printf("C spiked at %d\n", tc)
- } else {
- c = nil
- }
- }
- if a == nil && b == nil && c == nil {
- break
- }
- }
- }
|