Miki Tebeka avatar Miki Tebeka committed 27d1ad4

Multi sync with channel example

Comments (0)

Files changed (1)

+/* Example on how to synchronize multiple goroutines with closing a channel */
+package main
+
+import (
+	"fmt"
+	"time"
+)
+
+func main() {
+	// Channel which all goroutines wait on
+	ch := make(chan bool)
+	out := make(chan bool)
+	count := 10
+
+	// Spawn some goroutines
+	for i := 0; i < count; i++ {
+		go func(i int) {
+			fmt.Printf("%d waiting\n", i)
+			<-ch
+			fmt.Printf("%d done waiting\n", i)
+			out <- true
+		}(i)
+	}
+
+	fmt.Println("Nap time")
+	time.Sleep(1e9)
+	fmt.Println("Wakeup!")
+
+	// Wake up goroutines
+	close(ch)
+
+	// Wait for goroutines
+	for i := 0; i < count; i++ {
+		<-out
+	}
+}
+
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.