From f41b31adb15d588786d8cf6a5f8ab9b1c6b99843 Mon Sep 17 00:00:00 2001 From: Marcus Schiesser <mail@marcusschiesser.de> Date: Sat, 29 May 2021 14:44:18 +0800 Subject: [PATCH] added multiple producer/consumer with equal number of producers/consumers --- src/gofabric/main.go | 49 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/gofabric/main.go diff --git a/src/gofabric/main.go b/src/gofabric/main.go new file mode 100644 index 0000000..4d95bda --- /dev/null +++ b/src/gofabric/main.go @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + "sync" +) + +const ( + PRODUCERS = 10 + CONSUMERS = 10 +) + +var ( + ch chan string + wg sync.WaitGroup +) + +func main() { + ch = make(chan string) + for i := 1; i < PRODUCERS; i++ { + createProducer(i) + } + for i := 1; i < CONSUMERS; i++ { + createConsumer(i) + } + // wait for producer and consumers + wg.Wait() + fmt.Println("Consumers and producers are finished.") +} + +func createConsumer(i int) { + fmt.Printf("Starting consumer %d\n", i) + wg.Add(1) + go func() { + defer wg.Done() + msg := <-ch + fmt.Printf("Consumer %d received message: %v\n", i, msg) + }() +} + +func createProducer(i int) { + fmt.Printf("Starting producer %d\n", i) + wg.Add(1) + go func() { + defer wg.Done() + ch <- fmt.Sprintf("Hi from producer %d", i) + fmt.Printf("Producer %d done\n", i) + }() +} -- GitLab