asynchronous - Golang persistent channel accepting input from multiple function calls -
i have function a:
func a(input *some_type) {     // sth.     b(input)     }   this function gets called multiple times. want function b wait indefinitely input function a , perform action when has collected n inputs.
func b(input *some_type) {     // wait until received n inputs sth. inputs     }   how go doing this? first thought use sync.waitgroup channel between a , b.
this common producer-consumer problem. use channels wait on input routine. help?
in particular example, have call go b(c) again after collecting inputs terminates, wrap whatever b in infinite for loop. or whatever needs happen.
please note in example, , unbuffered channel used, forces both routines meet @ same time "hand off" *thing. if want producer (a's process) not have wait, can use buffered channel, created so:
c := make(chan(*thing, n))   where n number of items channel can store. allows several queued producer.
https://play.golang.org/p/x14_qsssu4
package main  import (     "fmt"     "time" )  type thing struct {     n int }  func a(t *thing, c chan (*thing)) {     // stuff happens. whee     c <- t }  func b(c chan (*thing)) {     things := []*thing{}     := 0; < 10; i++ {         t := <-c         things = append(things, t)         fmt.printf("i have %d things\n", i+1)     }     fmt.println("i have 10 things! let's roll!")     // stuff ten things }  func main() {     fmt.println("hello, playground")     c := make(chan (*thing))      go b(c)      // done producer-consumer in go-routine     := 0; < 10; i++ {         a(&thing{i}, c)         time.sleep(time.second)     }     time.sleep(time.second)     fmt.println("program finished") }      
Comments
Post a Comment