golang互斥锁

注意需要多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)
}

猜你喜欢

转载自blog.csdn.net/weixin_44328568/article/details/120276136