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)
}
使用互斥锁,就能解决这个问题了