首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >臂单拷贝原子性

臂单拷贝原子性
EN

Stack Overflow用户
提问于 2014-06-03 08:57:51
回答 1查看 4K关注 0票数 3

我目前正在浏览ARMv7核心的ARM体系结构手册。在关于内存访问的原子性的A3.5.3章中,它指出:

如果单个复制的原子负载与单个复制的原子存储重叠,并且对于任何重叠的字节,负载返回由单拷贝原子存储插入到该字节的一致性顺序中的写入所写入的数据,那么加载必须从一致性顺序中的一个点返回数据,而不早于所有重叠字节的单拷贝原子存储插入到一致性顺序中的写入。

作为非英语母语者,我承认我在理解这句话时受到了一些挑战。

是否有这样一种情况,即对内存字节的写入不按一致性顺序插入,因此不适用于上述情况?如果没有,我是否正确地说,将这句话缩短和重新措辞如下:

如果加载碰巧返回写入的至少一个字节,那么加载必须从一个不早于写入将它们插入到所有重叠字节的一致性顺序的点返回所有重叠字节。

还能传递同样的意思?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-03 22:47:27

我在ARMv8 ARM中看到了这种措辞,它确实试图在许多地方消除任何可能的歧义(即使它确实使内存排序部分几乎不可读)。

就一般理解而言(相对于实际实现规范而言),一点含糊不清并不总是有害的,因此,虽然它未能绝对明确“内存位置”的含义,但我认为旧的v7手册(DDI0406C.b)在这种情况下读起来更好:

如果下列条件均为真,则读或写操作是单拷贝原子操作:

  • 在对内存位置执行任意数量的写操作之后,内存位置的值就是写入操作之一写入的值。内存位置的部分值不可能来自一个写操作,而另一部分值来自另一个写操作。
  • 当对同一内存位置执行读操作和写操作时,读取操作获得的值为:

代码语言:javascript
复制
- the value of the memory location before the write operation
- the value of the memory location after the write operation.

从来不存在这样的情况:读取操作的值部分是写入操作之前的存储器位置的值,而部分是写入操作后的存储器位置的值。

所以你的理解是正确的--单拷贝原子操作的定义是,在任何给定的时间,你都只能看到所有的,或者没有。

在v7中有一种情况(如果我正确解释的话),两个通常是单拷贝的原子存储同时出现在同一位置,但大小不同,破坏了原子性的任何保证,所以理论上您可以观察到一些意想不到的字节组合--这在v8中看起来已经删除了。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24010989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档