go语言中的锁

101 阅读1分钟

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、原子操作