并发安全与锁
1、互斥锁
互斥锁是传统并发编程中对共享资源进行访问控制的主要手段,由标准库sync中的Mutex结构体类型表示。
sync.Mutex类型只有两个公开的指针方法:Lock(锁定)和Unlock(解锁)。
2、读写互斥锁
互斥锁的本质是当一个goroutine访问的时候,其他的goroutine都不能访问。,这样在资源同步,避免竞争的同时也降低了并发性能。程序由原来的并行执行变成了串行执行。
读并不存在资源竞争问题,写才是资源竞争最核心的本质。真正的互斥应该是读取和修改、修改和修改之间。
读写锁可以让多个读操作并发,同时读取。但是对写操作是完全互斥的。当一个goroutine进行写操作的时候,其他goroutine既不能进行读操作也不能进行写操作。读写锁由标准库sync中的RWMutex结构体类型表示。
sync.RWMutex类型有两个方法:Lock(写锁定)和Unlock(写解锁)、RLock(读锁定)和RUnlock(读解锁)。
编辑 (opens new window)