GO精髓(goroutine并发安全与锁)
1.互斥锁
互斥锁是对共享资源进行控制,在并发情况下只允许一个对其操作(一个协程访问时其他的都不能访问)
var count = 0 var wg sync.WaitGroup var mutex sync.Mutex //声明一个互斥锁 func test(){ mutex.Lock() count++ fmt.Println("the count is ",count) time.Sleep(time.Millisecond) mutex.Unlock() wg.Done() } func main(){ for i := 0 ;i<5 ;i++ { wg.Add(1) go test() } wg.Wait() }
2.读写互斥锁
读写互斥锁 可以让多个读操作并发 ,同时读取 ,但对于写操作完全互斥
有一个goroutine在写的时候 其他goroutine不能读也不能写
var mutex sync.RWMutex