社区
汇编语言
帖子详情
多CPU环境中,同一内存地址的读写同时进行的时候会发现什么情况?
DarknessTM
2007-05-23 11:42:55
硬件方面有对内存访问的序列化限制吗?
假设A地址的 初始数据是B
2个线程在进行操作,其中1个线程对A地址进行数据更新,更新为B1
另一个线程正在读取A的数据,会得到什么数据?
这2个步骤正好同时进行
...全文
789
8
打赏
收藏
多CPU环境中,同一内存地址的读写同时进行的时候会发现什么情况?
硬件方面有对内存访问的序列化限制吗? 假设A地址的 初始数据是B 2个线程在进行操作,其中1个线程对A地址进行数据更新,更新为B1 另一个线程正在读取A的数据,会得到什么数据? 这2个步骤正好同时进行
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
samsun2000
2007-06-04
打赏
举报
回复
很多解决方法,基于软硬件的都有。如果是catch的,有基于总线的MESI方法,基于目录的管理方法。如果是普通内存,有load before write方法来保证原子写。内容很多,建议看书
c157xigua
2007-06-01
打赏
举报
回复
应该不可能吧。在其中一个cpu写数据的过程中。内存传输数据的总线应该处在写数据的状态。而内存的数据总线应该只有一个吧。
Cnwanglin
2007-05-24
打赏
举报
回复
单核CPU是不会发生的
多核按照单核的理解应该发生,但是它为什么没发生呢,同样的软件系统
说明多核的CPU有控制,有更好的解决方案
foxdeng
2007-05-24
打赏
举报
回复
硬件上有防护这种情况的机制措施,严格时间上的同时读写同一地址内存是不会出现的。
DarknessTM
2007-05-24
打赏
举报
回复
我的意思不是说如何解决这个问题,而是这个现象可不可能发生(基本指目前的PC构架),发生的话会是什么结果
likexin
2007-05-24
打赏
举报
回复
依赖于机器 如果没有硬件保护 可以用一些相关指令,在读数据时锁内存 TSL
大熊猫侯佩
2007-05-23
打赏
举报
回复
lock 锁前缀
日立奔腾浪潮微软松下联想
2007-05-23
打赏
举报
回复
即便没有Cache,多处理器也是共享内存控制器的,应该不会出现同时读写的事。
“秒杀”是什么?简单来说即使在同时间有大量请求抢购买
同一
商品并交易
“秒杀”是什么?简单来说即使在同时间有大量请求抢购买
同一
商品并交易,因此
会
涉及大量并发写和并发读。所以说“秒杀”对程序开发者有很大的的挑战。怎么防止系统在应对百万级请求时候而不出故障?怎样保障高并发状态下数据的一致性?怎样在节约服务器成本
情况
下,应对短时间极大的的并发请求?怎样针对大流量
读写
请求
进行
定制化优化?对于这些问题,都能在这个课程
中
找到解决方案。此外你学完这套课程可以利用“秒杀”这个系统,了解怎样打造一个高并发、高可用、高性能的系统架构。
C++多核不同步
情况
下同时
读写
同一
个
内存地址
的讨论
多核
cpu
目前已经十分常见,因此在编程过程
中
多半
会
出现多线程同时
读写
某一个
内存地址
。比如线程T1和线程T2不使用锁,不使用原子语义
情况
下,修改某一个变量。这种
情况
下,结果往往是未定义(undefined)。
情况
一:设想如下情形,在一个32位系统上修改一个64位的变量,假设位一个计数器counter,低32位为0xffffffff,执行++操作后,低位变为了0x00000000,这时候就需要对高32位执行加一操作(进位),如果另一个线程T2在低32位加1变为0,高位即将执行加1之前操作,读取变量值,那么这
实战并发编程 - 01多线程
读写
同一
共享变量的线程安全问题深入剖析
文章目录示例
CPU
的内存模型Java内存模型 示例 来看个需求: 统计服务器某个接口的访问次数 accessCount字段表示接口被访问的次数, 每次访问接口的时候就调用一次access()方法,访问次数+1,累积下来,就能统计出接口被访问的次数了。 接口很可能被多个线程同时访问,即access()方法被多个线程调用。那么问题来了:多线程调用access()方法时,接口访问次数统计的结果是否能保证准确呢? 显而易见:不能。
CPU
的内存模型 接下来分析一下为什么上面统计的结果
会
有问题. 我们先来简单理
[C语言]多线程几乎同时
读写
同一
个
内存地址
时,出现变量概率不刷新问题
【现象】:linux,c语言程序, -O3优化。线程a对变量x赋值,int x=0,并将变量x地址传给线程b,线程b对变量x再次执行赋值操作x=2,此时在线程a内部访问变量x,值仍然为0,并未立刻刷新。 【解决过程】: ① 尝试对x变量类型前加volatile关键字:问题仍然存在,原因是虽然volatile
会
要求每次读取变量都从主存读取,但由于
cpu
cache的存在,仍然读取的是cache
中
的内...
对于多线程访问
同一
变量是否需要加锁的问题
对于多线程访问
同一
变量是否需要加锁的问题,先前大家都讨论过。今天用代码验证了一下之前的猜想:32位
CPU
与内存的最小交换数据为4字节/次,这也是结构体要对齐4字节的原因。在物理上,
CPU
对于
同一
4字节的内存单元,不可能写2个字节的同时,又读了3字节。 测试
环境
为: XEON 2
CPU
*2 Windows7 采用50,50,50线程交叉
读写
,试验代码如下: C/C+
汇编语言
21,458
社区成员
41,603
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章