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