github.com/neugram/ng@v0.0.0-20180309130942-d472ff93d872/eval/testdata/sync.ng (about) 1 import "sync" 2 3 ok := true 4 5 wg := sync.WaitGroup{} 6 mu := sync.Mutex{} 7 x := 0 8 for i := 0; i < 5; i++ { 9 wg.Add(1) 10 go func(i int) { 11 mu.Lock() 12 x += i 13 mu.Unlock() 14 wg.Done() 15 }(i) 16 } 17 wg.Wait() 18 19 if want := 0 + 1 + 2 + 3 + 4; x != want { 20 printf("x=%d, want=%d\n", x, want) 21 ok = false 22 } 23 24 ch := make(chan int, 5) 25 sendch := (chan<- int)(ch) 26 for i := 0; i < 5; i++ { 27 go func(i int) { 28 sendch <- i 29 }(i) 30 } 31 recvch := (<-chan int)(ch) 32 y := 0 33 for i := 0; i < 5; i++ { 34 y += <-recvch 35 } 36 if want := 0 + 1 + 2 + 3 + 4; y != want { 37 printf("y=%d, want=%d\n", y, want) 38 ok = false 39 } 40 41 if ok { 42 print("OK") 43 }