基于总线加锁和缓存锁(CPU实现原子操作的两种方式)

这篇具有很好参考价值的文章主要介绍了基于总线加锁和缓存锁(CPU实现原子操作的两种方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

总线锁

总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。

CPU和内存之间的通信被锁!!

如果多个处理器同时对共享变量进行读写改操作,那么共享变量就会被多个处理器同时进行操作,这样读写改操作就不是原子的,操作完之后共享变量的值会和期望的不一致。

举个栗子:如果 i=1,我们进行两次 i++ 操作,期望的结果是3,但是有可能结果是2。

基于总线加锁和缓存锁(CPU实现原子操作的两种方式),Java,并发编程,java

       原因可能是多个理器同从各自的存中量 i,分别进行加1操作,然后分写入系统内存中。

       那么,想要保证读改写共享量的操作是原子的,就必CPU1改写共享变量的候,CPU2不能操作存了共享量内存地址的存。这时,就可以使用总线锁解决问题。

缓存锁

缓存锁指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并允许它的缓存一致性机制来保证操作的原子性,因为缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其他处理器回写已被锁定的缓存行的数据时,会使缓存行无效。

(有的CPU不支持)性能比较好

缓存一致性机制

当某块CPU对缓存中的数据进行操作后,就通知其他CPU放弃储存在它们内部的缓存,或者从主内存中重新读取。文章来源地址https://www.toymoban.com/news/detail-623026.html

有两种情况下处理器不会使用缓存锁定

  • 当操作的数据不能被存在理器内部,或操作的数据跨多个存行(cache line则处理器会总线锁定。
  • 有些理器不支持定。Intel 486Pentium理器,就算定的内存区域在处理器的存行中也会总线锁定。

到了这里,关于基于总线加锁和缓存锁(CPU实现原子操作的两种方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于 Redis + Lua 脚本实现分布式锁,确保操作的原子性

    1.加锁的Lua脚本: lock.lua 2.解锁的Lua脚本: unLock.lua 3.将资源文件放在资源文件夹下 4.Java中调用lua脚本 1)获取文件方式 2)lua字符串方式 5.jedis调用Lua脚本实现分布式重试锁 1)引入jedis依赖 2)jedis调用lua

    2024年02月07日
    浏览(41)
  • 悲观锁和乐观锁、缓存

    悲观锁: 悲观锁的实现通常依赖于数据库提供的机制,在整个处理的过程中数据处于锁定状态,session的load方法有一个重载方法,该重载方法的第三个参数可以设置锁模式,load(object.class , int id,LockMode.?),该方法的?就是具体的锁模式。 乐观锁: 乐观锁使用版本号或者时间戳

    2024年02月09日
    浏览(34)
  • 【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

    存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器:寄存 缓存 内存 外存(按功能划分) 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存 (内存就是运行内存,如手机的8G运行内存,电脑的16G运行内存)就

    2024年01月25日
    浏览(41)
  • CPU的设计原理?CPU有哪几部分组成?CPU为何有32位和64位之分?CPU位数到底和数据总线有关还是和地址总线有关?什么是数据总线?什么是地址总线?

    宁可思一近,莫在思一停。 本文目的在于为想要转硬件方向的程序员解释 CPU 的设计原理及组成,数据总线地址总线与 CPU 位数的关系。 站在程序员的角度学习CPU设计原理 上图总体其实为 SoC 片上系统,但是一直叫被叫成 CPU 叫习惯了,准确来说里面的才是 CPU 。 可以认为一

    2024年02月16日
    浏览(32)
  • 原子操作的原理和实现

    目录 相关术语 处理器如何实现原子操作 Java如何实现原子操作 循环CAS实现原子操作 使用锁机制实现原子操作 原子操作是指一个或者多个不可再分割的操作。这些操作的执行顺序不能被打乱。 缓存行 :缓存的最小操作单位 (面试题、重点)比较并且交换(CAS) :CAS操作(

    2024年02月10日
    浏览(23)
  • redis集群的多key原子性操作如何实现?

    在单实例redis中,我们知道多key原子性操作可以用lua脚本或者multi命令来实现。 比如说有一个双删场景,要保证原子性同时删除 k1 和 k2 。 可以用lua双删 也可以用事务双删 但是在redis的集群中,key被hash到不同的slot,slot又被分配到多个不同redis实例。那么多key原子性操作如何

    2024年02月07日
    浏览(26)
  • springboot整合redis+lua实现getdel操作保证原子性

    原始代码 脚本逻辑先获取redis的值,判断是否等于期望值。 条件成立则删除,不成立则返回0 测试代码 根据上面的逻辑加了测试, 在判断成功后等待5秒后执行删除操作。同时开启另外一个线程去修改这个key的值, 发现修改的线程一直阻塞。直到等待的线程5秒结束后且完成

    2024年02月05日
    浏览(34)
  • 基于STM32的LIN总线的实现

    你好! 这是使用STM32F105RBT6单片机实现的LIN总线。ST其它型号也可,仔细阅读这篇文章,了解一下LIN总线的实现过程。

    2024年02月13日
    浏览(29)
  • 02 | 基于RS485总线通信实现智能家居监测系统

    Proteus 75SP3 Setup.exe LXK Proteus 7.5 SP3 v2.1.2.exe(破解) 2.1.1 准备设备 PC机一台(作为上位机) 网关一个 RS-485通信节点三个(一个作为主机、两个作为从机) 空气质量一个(安装在从机1上) 可燃气体传感器一个(安装在从机2上) USB转485调试器一个 2.1.2 网络图 2.1.3 硬件连接方法

    2024年02月12日
    浏览(38)
  • 单总线CPU设计(变长指令周期3级时序)(HUST)(头歌实验)

      利用比较器等功能模块将32位MIPS 指令字译码生成LW、SW、BEQ、SLT、ADDI、OtherInstr信号也就是利用比较器将指令字转换为译码信号,OP与不同信号对应(查询MIPS手册得知)  16 进制 :23 是 2进制: 00100011 ,把获得的OP,Func,和常数比对,相同输出1. 按照题目要求填写表格,使

    2024年02月07日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包