I am tring to practise goroutine and channels, where I am facing issue where I am calling gorouting and passing channel. The goroutine will push data into into channel and then main thread will print the elements.
I have used for loop to print the contents but getting.
fatal error: all goroutines are asleep - deadlock!
2
1
goroutine 1 [chan receive]:
main.main()
package main
import "fmt"
func smallThread(a int, c chan int) {
c <- a
}
func main() {
c := make(chan int)
go smallThread(1, c)
go smallThread(2, c)
for {
fmt.Println(<-c)
}
}
EDIT: Using waitgroup:
func smallThread(a int, c chan int, w *sync.WaitGroup) {
c <- a
w.Done()
}
func main() {
c := make(chan int)
var w sync.WaitGroup
w.Add(2)
go smallThread(1, c, &w)
go smallThread(2, c, &w)
//w.Wait()
for i := range c {
fmt.Println(i)
}
w.Wait()
}
EDIT2: Working Code
func smallThread(a int, c chan int, w *sync.WaitGroup) {
//defer w.Done()
c <- a
w.Done()
}
func main() {
c := make(chan int)
var w sync.WaitGroup
w.Add(1)
go smallThread(1, c, &w)
w.Add(1)
go smallThread(2, c, &w)
go func(c chan int) {
for i := range c {
fmt.Println(i)
}
}(c)
w.Wait()
}