注意需要多CPU侧能有效,单cpu自测不加锁的结果和加锁是一样的,可能和上下文切换有关,实际并不会并行执行。
package main
import(
"sync"
"fmt"
"time"
)
var num int
const NUM int = 1000000
var m_mutex sync.Mutex
func add(times int){
for i := 0; i < NUM; i++ {
m_mutex.Lock()
num++
m_mutex.Unlock()
}
fmt.Println("end [", times,"] num:", num)
}
func main(){
num = 0
var i int = 0
for ; i < 10; i++{
go add(i)
}
add(i)
time.Sleep(1 * time.Second)
}