From fd31a6584338c7ae290977c0dca8377a4fddcdc6 Mon Sep 17 00:00:00 2001 From: Sangeeth Sudheer Date: Mon, 29 Apr 2024 07:47:21 +0530 Subject: [PATCH] Add wait groups --- main.go | 6 ++++-- waitgroups/waitgroups.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 waitgroups/waitgroups.go diff --git a/main.go b/main.go index 1e91d0d..aa5c9e4 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,8 @@ package main // import "git.sangeeth.dev/gobyexample/closingchannels" // import "git.sangeeth.dev/gobyexample/timers" // import "git.sangeeth.dev/gobyexample/tickers" -import "git.sangeeth.dev/gobyexample/workerpools" +// import "git.sangeeth.dev/gobyexample/workerpools" +import "git.sangeeth.dev/gobyexample/waitgroups" func main() { // runes.Runes() @@ -27,5 +28,6 @@ func main() { // closingchannels.ClosingChannels() // timers.Timers() // tickers.Tickers() - workerpools.WorkerPools() + // workerpools.WorkerPools() + waitgroups.WaitGroups() } diff --git a/waitgroups/waitgroups.go b/waitgroups/waitgroups.go new file mode 100644 index 0000000..8eb5228 --- /dev/null +++ b/waitgroups/waitgroups.go @@ -0,0 +1,29 @@ +package waitgroups + +import ( + "fmt" + "math/rand" + "sync" + "time" +) + +func worker(id int, wg *sync.WaitGroup) { + defer wg.Done() + fmt.Printf("worker #%d starting\n", id) + time.Sleep(time.Duration((1 + rand.Intn(2))) * time.Second) + fmt.Printf("worker #%d exiting\n", id) +} + +func WaitGroups() { + numJobs := 3 + wg := sync.WaitGroup{} + + for i := range numJobs { + wg.Add(1) + go worker(i, &wg) + } + + wg.Wait() + + fmt.Println("Program exiting") +}