Wasn't this already answered for you here? https://stackoverflow.com/questions/43152776/is-it-one-channel-ops-affect-another-channel-ops
On Saturday, April 1, 2017 at 1:35:12 PM UTC-4, Khalid Adisendjaja wrote: > > I made this simple script, trying to understand how is channel working, > somehow if channel "c" is sent after channel "b" is sent the last routine > is not being proceed, > please see the runner function > > package main > > import ( > "fmt" > "strconv" > "time" > ) > > func runner(idx int, c chan []int, b chan []int) { > var temp []int > fmt.Println("runner " + strconv.Itoa(idx)) > bucket := <-b > for k, v := range bucket { > if v != 0 { > temp = append(temp, v) > bucket[k] = 0 > } > if len(temp) == 5 { > break > } > } > > //Strange condition if channel c is sent after channel b is sent, > //somehow the last runner is not being proceed > b <- bucket > c <- temp > > //All runner ara all proceed if c is sent first > // c <- temp > // b <- bucket > > } > > func printer(c chan []int) { > for { > select { > case msg := <-c: > fmt.Println(msg) > time.Sleep(time.Second * 1) > } > } > } > > func main() { > > c := make(chan []int, 5) > bucket := make(chan []int) > > go runner(1, c, bucket) > go runner(2, c, bucket) > go runner(3, c, bucket) > go runner(4, c, bucket) > > bucket <- []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, > 16, 17, 18, 19, 20} > > go printer(c) > > var input string > fmt.Scanln(&input) > > } > > > > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.