锁的作用就是某个 协程 (线程)在访问某个资源时先锁住,防止其它协程的访问,等访问完毕解锁后其他协程再来加锁进行访问。
互斥锁是传统的并发程序对共享资源进行访问控制的主要手段。防止重要资源被多个 协程同时调用。它由标准库代码包sync中的Mutex结构体类型代表。sync.Mutex类型(确切地说,是*sync.Mutex类型)只有两个公开方法——Lock和Unlock。顾名思义,前者被用于锁定当前的互斥量,而后者则被用来对当前的互斥量进行解锁。
类型sync.Mutex的零值表示了未被锁定的互斥量。也就是说,它是一个开箱即用的工具。我们只需对它进行简单声明就可以正常使用了
var x int
var wg sync.WaitGroup //等待
var mutex sync.Mutex //互斥锁
func f1() {
mutex.Lock()
for i := 0; i < 1000; i++ {
x++
}
defer mutex.Unlock()
wg.Done()
}
func main() {
wg.Add(2)
go f1()
go f1()
wg.Wait()
fmt.Println(x)
}
网友评论