From 43ff608b7e990e0eeaa76a7a57b3a46d92fde04c Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Thu, 30 May 2019 05:41:16 -0700 Subject: [PATCH] Remove old location of example in public/ --- public/waiting-for-goroutines-to-finish | 223 ------------------------ 1 file changed, 223 deletions(-) delete mode 100644 public/waiting-for-goroutines-to-finish diff --git a/public/waiting-for-goroutines-to-finish b/public/waiting-for-goroutines-to-finish deleted file mode 100644 index 4f20729..0000000 --- a/public/waiting-for-goroutines-to-finish +++ /dev/null @@ -1,223 +0,0 @@ - - - - - Go by Example: Waiting For Goroutines To Finish - - - - -
-

Go by Example: Waiting For Goroutines To Finish

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-

To wait for multiple goroutines to finish, we can -use a sync.WaitGroup.

- -
- - -
- - - -
package main
-
- -
- - - -
import (
-    "fmt"
-    "math/rand"
-    "sync"
-    "time"
-)
-
- -
-

This is the function we’ll run in every goroutine. -wg is the WaitGroup it uses to notify that it’s done. -Note that a WaitGroup must be passed to functions by -pointer.

- -
- -
func worker(id int, wg *sync.WaitGroup) {
-    fmt.Printf("Worker %d starting\n", id)
-
- -
-

Sleep for a random duration between 500-700 ms -to simulate work. See the random numbers -example for more details on rand.

- -
- -
    msToSleep := time.Duration(500 + rand.Intn(200))
-    time.Sleep(msToSleep * time.Millisecond)
-    fmt.Printf("Worker %d done\n", id)
-
- -
-

Notify the WaitGroup that we’re done.

- -
- -
    wg.Done()
-}
-
- -
- - - -
func main() {
-
- -
-

This WaitGroup is used to wait for all the -goroutines launched here to finish.

- -
- -
    var wg sync.WaitGroup
-
- -
-

Launch several goroutines and increment the WorkGroup -counter for each.

- -
- -
    for i := 1; i <= 5; i++ {
-        wg.Add(1)
-        go worker(i, &wg)
-    }
-
- -
-

Block until the WorkGroup counter goes back to 0; -all the workers notified they’re done.

- -
- -
    wg.Wait()
-}
-
- -
- - - - - - - - - - - - - -
- - - -
$ go run waiting-for-goroutines-to-finish.go
-Worker 5 starting
-Worker 3 starting
-Worker 4 starting
-Worker 1 starting
-Worker 2 starting
-Worker 4 done
-Worker 1 done
-Worker 2 done
-Worker 5 done
-Worker 3 done
-
- -
-

The order of workers starting up and finishing -is likely to be different for each invocation.

- -
- - -
- - -

- Next example: Channel Directions. -

- - -
- -