锁所需要使用的变量

var must sync.Mutex
var mustR sync.RWMutex

func main() {
    for  {
        go func() {
            must.Lock()
            fmt.Println("测试锁")
        }()
    }
}

你会发现他会一直堵塞,只会执行打印一次测试锁,除非解锁,否则只会一次。


func main() {
    for i:=0;i<=100;i++ {
        go func() {
            //写锁定
            must.Lock()
            fmt.Println("这是被锁上的内容",i)
            if i%2==0{
                //写解除
                must.Unlock()
                fmt.Println("这是被解开的锁",i)
            }
        }()
    }
}

通过这个,我们明确的发现互斥锁其实是会消耗时间的,即使消耗的时间非常小,当然对于实际应用场面这点时间可以忽略不计。


func main() {
    for i:=0;i<=100;i++ {
        go func() {
        //读锁定
            mustR.RLock()
            fmt.Println("这是读锁定")
            //读解锁
            mustR.RUnlock()
        }()
    }
}

通过这个,我发现只要不涉及读的操作,他是不会堵塞的,所以fmt算是写操作


只会执行一次的操作函数

func main() {
    s := &sync.Once{}
    for {
        s.Do(func() {
            fmt.Println("sdfsd")
        })
    }
}
最后修改:2021 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏