package main

import (
	"fmt"
	"sync"
)

var mutex sync.Mutex

func main() {
	var count = 0
	var wg sync.WaitGroup
	wg.Add(10)
	for i := 0; i < 10; i++ {
		go func() {
			defer wg.Done()

			for j := 0; j < 100000; j++ {
				count++
			}

		}()
	}
	wg.Wait()
	fmt.Println(count)
}

这个代码有对共享变量的非同步访问


package main

import (
	"fmt"
	"sync"
)

var mutex sync.Mutex

func main() {
	var count = 0
	var wg sync.WaitGroup
	wg.Add(10)
	for i := 0; i < 10; i++ {
		go func() {
			defer wg.Done()
			mutex.Lock()
			for j := 0; j < 100000; j++ {
				count++
			}
			mutex.Unlock()
		}()
	}
	wg.Wait()
	fmt.Println(count)
}

使用互斥锁,就能解决这个问题了