代码之家  ›  专栏  ›  技术社区  ›  Stack Overflow is garbage

原子x86指令的对齐要求

  •  35
  • Stack Overflow is garbage  · 技术社区  · 16 年前

    InterlockedCompareExchange 用于执行原子比较和交换操作的函数。还有一个 _InterlockedCompareExchange .

    在x86上,这些是使用 lock cmpxchg

    reference manual

    lock

    因此,英特尔似乎表示,对齐是无关紧要的。无论如何,操作都是原子性的。

    cmpxchg

    4 回复  |  直到 6 年前
        1
  •  11
  •   Peter Cordes    6 年前

    lock cmpxchg

    lock

    你猜测只适用于486之前的系统,而不适用于 cmpxchg 有一个不同的和 currently-undocumented opcode 0f a7 modern cmpxchg ( 0f b1 )

    英特尔64和IA-32体系结构软件开发人员手册

    8.1.2.2软件控制总线锁定

    为了明确强制使用LOCK语义,软件可以在使用以下指令修改内存位置时使用LOCK前缀。 [...]

    交换指令(XADD、CMPXCHG和CMPXCHG8B)。

    内存字段。尽可能多的总线周期都遵循LOCK语义

    8位访问的任何边界(锁定或其他)。



    cmpxchg without a lock prefix is still atomic wrt. context switches

    这可能有道理,但不需要这样做。(如果不内联,32位版本将不得不从堆栈中加载其参数,但这是私有的,不能访问共享变量。)

        2
  •  9
  •   damageboy    15 年前

    PDF you are quoting from

    up-to-date Intel documentation Volume-3A

    Intel486处理器(以及此后更新的处理器)保证以下几点

    • 读取或写入字节

    使拆分访问原子化的子系统;然而,非对齐数据访问将

        3
  •  4
  •   Community Mohan Dere    9 年前
        4
  •  3
  •   Peeter Joot    16 年前

    推荐文章