Contents

通用技术-CAS与乐观锁(自旋锁)

博客园 X-knight [数据库锁机制] 深入理解乐观锁、悲观锁以及CAS乐观锁的实现机制原理分析

CAS概念

CAS(Compare and Swap)是乐观锁的一种实现技术

具体实现就是

1
2
3
if val==expectVal{
  val=newVal
}

ABA问题

线程1在获取内存中val和给val赋值之间的时间,线程2将val赋值为其他值然后在变回expectVal

解决办法:版本号,时间戳

自旋锁

learnku Mericustar

自旋锁是一种乐观锁,技术也是CAS

线程在自旋过程中通过CAS来查询是否可以获得锁

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
type SpinLocker uint32

func (sl *SpinLocker) Lock() {
    for !atomic.CompareAndSwapUint32((*uint32)(sl), 0, 1) {
        runtime.Gosched()
    }
}

func (sl *SpinLocker) Unlock() {
    atomic.StoreUint32((*uint32)(sl), 0)
}
 |