1、互斥锁 ---控制共享资源的访问
var lock sync.Mutex
锁普通变量 lock.Lock() 变量操作 locl.Unlock()
- 当给一个类型中加一个锁变量时 如果使用锁则是对类型中全部变量的访问加锁
type Info struct {
mu sync.Mutex
// ... other fields, e.g.: Str string
}
- 当多个协程被锁住时,资源释放唤醒协程时是随机的
2、读写锁 分为读锁和写锁
- 当有协程获取读锁时,其他协程可以获取读锁,但不可以获取写锁
- 当有协程获取写锁时,其他协程读写锁都不可获取
- 写者是有排他性的,同时只能有一个写者或者多个读者
var rwlock sync.RWMutex
加写锁 rwlock.Lock() 解写锁 rwlock.Unlock()
加读锁 rwlock.RLock() 解读锁 rwlock.RUnlock()
3、自旋锁,当拿不到资源时,会选择不停访问该锁,而不是阻塞等待
4、原子操作