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 @@ - - -
- -
- 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. -
- - -