36 lines
368 B
Go
36 lines
368 B
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
var x = 0
|
||
|
|
||
|
func main() {
|
||
|
var w sync.WaitGroup
|
||
|
var m sync.Mutex
|
||
|
|
||
|
numRunners := 2000
|
||
|
|
||
|
w.Add(numRunners)
|
||
|
|
||
|
for i := 0; i < numRunners; i++ {
|
||
|
go increment(&w, &m)
|
||
|
}
|
||
|
|
||
|
w.Wait()
|
||
|
|
||
|
fmt.Println("Final value of x: ", x)
|
||
|
}
|
||
|
|
||
|
func increment(wg *sync.WaitGroup, m sync.Locker) {
|
||
|
m.Lock()
|
||
|
{
|
||
|
x = x + 1
|
||
|
}
|
||
|
m.Unlock()
|
||
|
|
||
|
wg.Done()
|
||
|
}
|