问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

原子操作的实现原理

发布网友 发布时间:2023-05-07 00:24

我来回答

1个回答

热心网友 时间:2023-11-24 06:37

我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。

32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作

首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度,跨多个缓存行,跨页表的访问。但是处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。

第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写(i++就是经典的读改写操作)操作,那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致,举个例子:如果i=1,我们进行两次i++操作,我们期望的结果是3,但是有可能结果是2。如下图

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

“缓存锁定”指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不需要在总线上声言LOCK#信号,而是修改内部的内存地址,通过缓存一致性机制保证操作的原子性。
例外:当操作的数据不能被缓存在处理器内部,或操作的数据跨多个缓存行,处理器会调用总线锁定。

在java中可以通过锁和循环CAS的方式来实现原子操作。
CAS

ABA问题
循环时间长开销大
只能保证一个共享变量的原子操作

原子操作的实现原理
聊聊并发(五)原子操作的实现原理

热心网友 时间:2023-12-16 07:34

我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。

32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作

首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度,跨多个缓存行,跨页表的访问。但是处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。

第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写(i++就是经典的读改写操作)操作,那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致,举个例子:如果i=1,我们进行两次i++操作,我们期望的结果是3,但是有可能结果是2。如下图

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

“缓存锁定”指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不需要在总线上声言LOCK#信号,而是修改内部的内存地址,通过缓存一致性机制保证操作的原子性。
例外:当操作的数据不能被缓存在处理器内部,或操作的数据跨多个缓存行,处理器会调用总线锁定。

在java中可以通过锁和循环CAS的方式来实现原子操作。
CAS

ABA问题
循环时间长开销大
只能保证一个共享变量的原子操作

原子操作的实现原理
聊聊并发(五)原子操作的实现原理

热心网友 时间:2023-11-24 06:37

我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。

32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作

首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行16/32/64位的操作是原子的,但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度,跨多个缓存行,跨页表的访问。但是处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。

第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写(i++就是经典的读改写操作)操作,那么共享变量就会被多个处理器同时进行操作,这样读改写操作就不是原子的,操作完之后共享变量的值会和期望的不一致,举个例子:如果i=1,我们进行两次i++操作,我们期望的结果是3,但是有可能结果是2。如下图

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

“缓存锁定”指内存区域如果被缓存在处理器的缓存行中,并且在Lock操作期间被锁定,那么当它执行锁操作回写到内存时,处理器不需要在总线上声言LOCK#信号,而是修改内部的内存地址,通过缓存一致性机制保证操作的原子性。
例外:当操作的数据不能被缓存在处理器内部,或操作的数据跨多个缓存行,处理器会调用总线锁定。

在java中可以通过锁和循环CAS的方式来实现原子操作。
CAS

ABA问题
循环时间长开销大
只能保证一个共享变量的原子操作

原子操作的实现原理
聊聊并发(五)原子操作的实现原理

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
erp可以看评论地址吗 淘宝评论url是什么意思? 揭秘:码牌支付风控升级,背后真相揭秘 电脑电视直播软件哪个好用什么软件好电脑看电视直播 潼南子同街学区是哪些 三极管BU406价格和参数? 火锅料放在冰柜忘了插电一个星期给会坏了吗 火锅的设备有哪些 火锅餐厅厨房有哪些 小火锅厨房设备有哪些 总线锁、缓存锁 陆翔路邮编祁连山路何时通陆翔路美兰湖路陆翔路打通 东莞市东城区蒗基湖一路5号邮编? 什么是可复制的方法 复制法对成分的影响 mbi是什么学位 lune是什么意思 switch手柄有白点点 数米而炊造句 数米而炊的故事 煤的气化发展简介? 孩子办留学签证需要什么手续 工业上为何对煤进行气化 煤气化,现在有个问题,就是好多研究机构都在研究煤气化,但是煤气化的好处是什么呢?为什么煤气化呢? 上海欧姆龙是流水线吗 金桥欧姆龙电子厂怎么样 上海欧姆龙电子厂怎么样普工 上海欧姆龙厂上班是站还是坐 淹煎[yān jiān]什么意思?近义词和反义词是什么?英文翻译是什么? 斗艳争芳的意思 摩托车跨骑全是挂档车吗,本田17期 250 春风250有变速箱吗 最近准备入手一款250CC的国产摩托车,都有哪些厂家生产的哪些型号?目前就知道豪爵铃木250,请高手推荐罗列 从海口到徐闻开车过海怎么预约 湛江到海口的渡轮春节停运吗 受台风影响12月20日凌晨起海南港口停航通知 储奶袋可以分两次倒奶吗,可以用储奶袋直接温奶吗 卤田的解释卤田的解释是什么 紫金财产保险股份有限公司内蒙古分公司鄂尔多斯中心支公司怎么样? 驾照过期保险公司拒赔惹争议 请问渤海财险主要承保哪些呀?险种多吗? 明基汽车公司强制要求买渤海保险 不买该保险会怎么样 这种事要找哪个部门投诉 鼈咳的解释 中国人民财产保险股份有限公司大余支公司怎么样? 中国人民财产保险股份有限公司定南支公司怎么样? 中国人民财产保险股份有限公司宁都支公司怎么样? 中国人民财产保险股份有限公司寻乌支公司怎么样? 口角生风比喻什么生肖 人无贵贱,法律天平的下联 现在开瓷砖店,怎么吸引顾客