package main
import (
"strconv"
"time"
"sync"
"fmt"
)
var counter int = 0
var counterLock *sync.Mutex = &sync.Mutex{}
func dosomething(millisecs time.Duration, wg *sync.WaitGroup) {
wg.Add(1)
go func() {
defer wg.Done()
counterLock.Lock()
counter += 1
counterLock.Unlock()
duration := millisecs * time.Millisecond
time.Sleep(duration)
fmt.Println("Function in background, duration:", duration)
}()
}
func main() {
var wg sync.WaitGroup
fmt.Println("Hello, playground")
dosomething(1600, &wg)
dosomething(200, &wg)
dosomething(400, &wg)
dosomething(150, &wg)
dosomething(600, &wg)
wg.Wait()
fmt.Println("Done " + strconv.Itoa(counter) + " tasks...")
}