## 锁所需要使用的变量 ## ``` 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") }) } } ``` Loading... ## 锁所需要使用的变量 ## ``` 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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏