我目前正在通过ARMv7核心的ARM架构手册趟。在A3.5.3关于内存访问的原子,IT指出:

如果单拷贝原子负载重叠单副本原子存储和 对于任何重叠的字节,负载返回所写的数据 写入的写入该字节的相干顺序 单拷贝原子商店然后负载必须从一个点返回数据 在连贯性订单中,没有比插入的写入 通过所有的单拷贝原子算法顺序 重叠字节。

作为非母语英语扬声器,我承认我在理解这句话时略有挑战。

是否有一个场景,其中写入存储字节的写入不插入相干顺序,因此上述不适用?如果不是,我才能说缩短和重新向句子缩短以下内容:

如果负载发生以返回至少一个字节 写入,然后负载必须从一个点返回所有重叠字节 没有早于写入它们进入的地方 所有重叠字节的一致性顺序。

仍然运输相同的含义?

有帮助吗?

解决方案

我看到armv8臂中的措辞真的试图在很多地方删除任何可能的歧义(即使它确实使内存排序部分几乎不可读)。

在一般理解方面(而不是实际实施规范),一点点歧义并不总是受到伤害,因此它绝对不会使其清除什么“内存位置”意味着,我认为旧的V7手册(DDI0406C.B)是在这种情况下阅读的更好读取:

如果以下条件均为真,则读取或写入操作是单副本原子:

  • 在任何数量的写入操作到存储器位置之后,存储器位置的值是由一个写操作写入的值。内存位置的一部分是不可能来自一个写入操作和来自不同写入操作的另一部分的部分

  • 当读取操作和写入操作在相同的存储器位置时,通过读取操作获得的值是:

    之一

    • 写入操作之前的存储器位置的值
    • 写入操作后内存位置的值。

    永远不是这样的情况,读取操作的值是部分地是写入操作前的存储位置的值,并且部分地在写入操作之后的存储器位置的值。

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

在v7中有一个情况(如果我解释它是正确的)两个通常的单拷贝原子存储在同一位置的同一位置,但具有不同大小的尺寸破坏了原子性的任何保证,所以理论上你可以在那里观察一些意外的字节混合 - 这看起来已在v8中删除。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top