go语言中的锁分为互斥锁、读写锁、原子锁即原子操作
互斥锁
概念
go语言中的互斥锁是由标准源码包sync中的Mutex结构体表示的,sync.Mutex只对外公开了两个指针方法Lock()和Unlock(),前者用于锁定互斥变量,后者用于互斥变量的解锁。并且由于go语言中defer语法糖的出现,使得我们不用担心加锁后会忘记解锁。
对于同一互斥变量的锁定操作和解锁操作是成对出现的,如锁定了一个已锁定的互斥变量,那么进行重复锁定操作的goroutine将被阻塞,直到互斥锁回到解锁状态,即外部的锁解锁为止。
package main
import (
"fmt"
"sync"
"time"
)
func main(){
var mutex sync.Mutex
fmt.Println("加锁main")
mutex.Lock()
fmt.Println("已经加锁main")
for i:=0;i<3 ;i++ {
go func(