用一致性实现锁

用一致性实现锁:

自旋锁:处理器通过循环来不停尝试获得锁,直到成功为止

自旋锁两种情况:
  • 程序员占用锁的时间很短
  • 程序员要求锁在可用时,锁定过程的时延较低
自旋锁要阻塞处理器并且一直循环等待锁被释放,自旋锁在某些条件下是不适用的.

把锁放到cache中保证其一致性:
  • 自旋(在一个紧凑的循环中不断检测和尝试占用锁)过程的实现能够在本地cache副本中完成,不需每次尝试占用锁都进行全存储访问
  • 锁的访问的局部性,最后一个使用该锁的处理器能够很快的访问
对锁的本地副本进行循环检查,直到发现可以获取该锁,通过交换操作占用该锁
处理器首先读入锁变量以检测其状态,处理器会一直进行检测的过程,直到读入的数值表示锁已被解锁为止。处理器还要跟其他进程进行竞争,看谁能够首先锁定该变量,所有进程都使用交换指令来读入以前的值并
把1存到锁变量中。

自旋锁实现cache一致性:
一旦占用锁的处理器把0放到锁中,所有其他的cache副本都变为无效而且必须取回新值来更新副本

只有一个cache首先取到未锁定值(0)的副本然后执行交换,其他处理器的cache缺失得到响应后,会发现变量已经被锁定,因此必须重新检测和自旋

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值