go互斥锁 主要用于解决资源竞争,并发程序中对共享资源进行访问控制的主要手段
对于访问共享资源的协程都加上锁并最后解锁
关键
lock
unlock
package main
import (
"sync"
)
var wg sync.WaitGroup
var lk sync.Mutex
var total int
func sub() {
defer wg.Done()
for i:=0;i<1000;i++{
lk.Lock()
total=total-1
lk.Unlock()
}
}
func add() {
defer wg.Done()
for i:=0;i<1000;i++ {
lk.Lock()
total=total+1
lk.Unlock()
}
}
func main() {
wg.Add(2)
go sub()
go add()
wg.Wait()
println(total)
}
该篇博客探讨了Go语言中互斥锁(Mutex)在并发编程中的使用,通过`lk.Lock()`和`lk.Unlock()`实现对变量`total`的访问控制。在`sub`和`add`两个协程中,分别进行减一和加一操作,确保了资源共享的安全性。最终通过`sync.WaitGroup`等待所有协程完成,输出`total`的值,展示了互斥锁在解决资源竞争问题上的关键作用。

被折叠的 条评论
为什么被折叠?



