当前位置:网站首页>【并发编程046】对于同步方法,处理器如何实现原子操作?
【并发编程046】对于同步方法,处理器如何实现原子操作?
2022-04-21 09:54:00 【檀越剑指大厂】
对于同步方法,处理器如何实现原子操作?
处理器提供总线锁定和缓存锁定两个机制来保证复杂 内存操作的原子性。
总线锁定:
如果多个处理器同时对非同步共享变量进行读改写操作 (i++就是经典的读改写操作) , 那么共 享变量就会被多个处理器同时进行操作, 这样读改写操作就不是原子的, 操作完之后共享变量的 值会和期望的不一致 。原因可能是多个处理器同时从各自的缓存中读取变量i, 分别进行加1操作, 然后分别写入系统内存中。
对于同步方法操作i++时, 部分处理器使用总线锁就是来解决这个问题的 。所谓总线锁就是使用 处理器提供的一个 LOCK#信号 (参见93题的Lock汇编指令) , 当一个处理器在总线上输出此信 号时, 其他处理器的请求将被阻塞住, 那么该 处理器可以独占共享内存, 只不过总线锁定开销很 大。
缓存锁定:
所谓“缓存锁定”是指内存区域如果被缓存在处理器的缓存 行中, 并且在Lock操作期间 被锁定, 那么当它执行锁操作回写到内存时, 处理器不在总线上声 言LOCK#信号, 而是修改内 部的内存地址, 并允许它的缓存一致性机制来保证操作的原子 性, 因为缓存一致性机制会阻止同 时修改由两个以上处理器缓存的内存区域数据, 当其他处理器回写已被锁定的缓存行的数据时 , 会使缓存行无效.
版权声明
本文为[檀越剑指大厂]所创,转载请带上原文链接,感谢
https://qinyingjie.blog.csdn.net/article/details/124313666
边栏推荐
猜你喜欢
![[notes] Launch file syntax record](/img/68/cbd3d6173535223c54e1dcf9ecc142.png)
[notes] Launch file syntax record

控制另一个程序的启动、隐藏、显示、关闭

Generate training set and verification set (Yolo) by using existing label files
![Kali:sqlmap :[10:39:37] [CRITICAL] unable to connect to the target URL](/img/bf/123e6f5eadb8d502e135a7cff9b120.png)
Kali:sqlmap :[10:39:37] [CRITICAL] unable to connect to the target URL

【笔记】.launch文件语法记录

Operation of simulation test platform for test questions of refrigeration and air conditioning equipment operation test in 2022

Operating system - thread safety - Learning

The display problem of gltf model with transparent map

每日一题(2022-04-20)——文件的最长绝对路径

2022年危险化学品生产单位安全生产管理人员特种作业证考试题库模拟考试平台操作
随机推荐
控制另一个程序的启动、隐藏、显示、关闭
【手拉手 带你准备电赛】使用定时器中断更改PWM占空比
On the three paradigms of database design
Using pycharm to load the QRC resource file in pyside2
gltf模型带透明贴图的显示问题
事务的隔离级别与MVCC
常用文本处理命令
CentOS下Docker中安裝MySQL
浅谈数据库设计之三大范式
Uniapp style penetration
A tool that is easier to use and more powerful than Navicat!
Transaction isolation level and mvcc
2022年A特种设备相关管理(电梯)考试试题模拟考试平台操作
给网站添加pjax无刷新,换页音乐不中断
What are the products of Guangzhou futures exchange?
部署web服务器,亲身经历
Question brushing record (leetcode)
wap图片
【无标题】
Write table of MySQL Foundation (create table)