I have been writing code for multiple consumer and multiple producer pattern, but my code is giving a deadlock error.
I have created an anonymous function so that the “for…range” in consumer function doesn’t wait forever.
package main
import (
"fmt"
"sync"
"sync/atomic"
)
func main() {
noOfProducer := 10
noOfConsumer := 10
data := make(chan int64)
var wg sync.WaitGroup
// producer
var ops int64
for i := 0; i < noOfProducer; i++ {
wg.Add(1)
go func() {
for c := 0; c < 100; c++ {
atomic.AddInt64(&ops, 1)
data <- atomic.LoadInt64(&ops)
}
wg.Done()
}()
}
go func() {
wg.Wait()
close(data)
}()
// consumer
for i := 0; i < noOfConsumer; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
for data := range data {
fmt.Printf("Value of i = %d Printed by consumer %d\n", data, i)
}
}(i)
}
wg.Wait()
}
Any help would be appreciated.