gpt4 book ai didi

multithreading - InterlockedExchange 和内存对齐

转载 作者:行者123 更新时间:2023-12-04 06:48:59 24 4
gpt4 key购买 nike

我很困惑,微软说 InterlockedExchange 需要内存对齐,但是,英特尔文档说 LOCK 不需要内存对齐。
我错过了什么,还是什么?
谢谢

来自 Microsoft MSDN 库

平台 SDK:DLL、进程和线程
联锁交易所

Target 参数指向的变量必须是 在 32 位边界上对齐 ;否则,此函数将 在多处理器 x86 系统上的行为不可预测 和任何非 x86 系统。

来自英特尔软件开发人员手册;

  • 锁定指令
    导致处理器的 LOCK# 信号在伴随指令的执行期间被置位(将指令转换为原子指令)。在多处理器环境中,LOCK# 信号确保处理器具有 独占使用任何共享内存 当信号被断言时。

    LOCK 前缀的完整性不受内存字段对齐的影响。
    对于任意未对齐的字段,会观察到内存锁定。
  • P6 和更新的处理器系列中的内存排序

    锁定指令具有总顺序。
  • 软件控制总线锁定

    总线锁的完整性不受内存字段对齐的影响。 遵循 LOCK 语义更新整个操作数所需的尽可能多的总线周期。 但是,建议锁定访问在其自然边界上对齐以获得更好的系统性能:
    • 8 位访问(锁定或其他方式)的任何边界。
    • 锁定字访问的16 位边界。
    • 锁定双字访问的32 位边界。
    • 锁定四字访问的64 位边界。
  • 最佳答案

    曾几何时,Microsoft 在 x86 以外的处理器上支持 WindowsNT,例如 MIPS、PowerPC 和 Alpha。这些处理器都需要对其互锁指令进行对齐,因此 Microsoft 在其规范中提出了要求,以确保这些原语可以移植到不同的体系结构中。

    关于multithreading - InterlockedExchange 和内存对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881820/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com