首页 > 编程知识 正文

锁面板机制,cas锁底层原理

时间:2023-05-04 02:14:33 阅读:129219 作者:4931

锁定的基础利用了CPU的原子命令,CompareAndSwap,也就是CAS。

怎么锁?

以互斥锁为例,在一个内存中维护一个变量和线程信息,变量为0表示当前没有锁定,变量为1表示存在锁定,写入自己的线程信息表示当前线程占用锁定

尝试获取锁定的每个线程都使用CPU的CompareAndSwap指令获取锁定。 相应的指令为CAS(addr,0,1 ),该指令在地址存储在adder内存中的变量取值0时将变量更改为1,表示锁定成功。

1、首先,CPU的体系结构决定了独立内存同时只能由一个CPU读取和写入,同时只有一个CPU获得相应的总线权限,可以读取和写入内存。

2、每次锁定对应的变量都必须从存储器中读取。 CPU为了匹配存储器的低速率访问,放入了与各CPU内部对应的寄存器,所以对应的变量被缓存在寄存器中。 于是,当其他CPU修改对应的值时,寄存器的中心不更新,保持以前的旧值,所以每次从存储器中取出最新的存储器的值。

if(x=0) update x=1、thread信息的方式无法解决锁定问题,因为x=0和update不是原子操作。

如果线程在x=0下运行,且线程锁定,则其他线程运行update并获得锁定,但线程醒来后直接运行update。 这引起了锁定冲突,一个线程的锁定被另一个线程占领。

CAS是硬件提供的原子操作,它在运行时一直锁定总线,在运行时不会按操作系统计划挂起。 首先,确定内存中的值是否符合预期,如果等于,则直接用与新值对应的内存替换与锁定对应的内存值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。