诛仙3元婴星语:无锁数据结构的本质

来源:百度文库 编辑:九乡新闻网 时间:2024/05/01 20:39:26
    无锁算法的精髓在于 ,CAS(compare-and-swap),它的本质思想是通过原子操作来实现 系统从一个状态进入另一个状态的改变。

它的思想和普通的锁不同,普通的锁需要 先获得锁->修改系统状态->再释放锁这三个步骤来实现系统状态的改变,对普通锁的外部而言,只有锁被释放,其他过程才能看到状态的改变,而在锁没有释放前,其他等待的过程被操作系统调度给“定住”了。

无锁算法 没有获得锁和释放锁的步骤,由CPU自身实现,直接互斥地实现系统状态的改变,它的使用基本思想是copy-on-write——在修改完对象的副本之后再用CAS操作将副本替换为正本。

CAS之所以没有一般锁的弊端,完全是因为一般没有像一般的锁那样被使用,即如果把普通的锁看做一个可被无锁管理的资源,那么获得锁要lock-free,释放锁也要lock-free中间的过程如果还有其他的锁获得过程,同样可能存在其他锁的问题。

顺便说一句,前面所说的“系统”即进程中所有线程的集合,普通锁需要挂起线程等待,free-lock需要循环等待,一个需要操作系统支持一个不需要,一个是死锁,一个是活锁。