mutex.go 405 B

123456789101112131415161718192021222324252627
  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. )
  6. func main() {
  7. var x int
  8. wg := new(sync.WaitGroup)
  9. mu := new(sync.Mutex)
  10. for i := 0; i < 1000; i++ {
  11. // Запускаем 1000 экземпляров горутины, увеличивающей счетчик на 1
  12. wg.Add(1)
  13. go func(wg *sync.WaitGroup) {
  14. defer wg.Done()
  15. mu.Lock()
  16. x++
  17. mu.Unlock()
  18. }(wg)
  19. }
  20. wg.Wait()
  21. fmt.Println(x)
  22. }