在x86上如果[mem]不是32位对齐,可以"锁定inc [mem]"仍然可以正常工作吗?

Vin*_*nce 6 x86 assembly multithreading multiprocessing

在x86上,如果mem是32位对齐的,则mov操作保证是原子的.

如果[mem]不是32位对齐,那么lock inc [mem]sill工作正常吗?

工作正常:提供原子性而不是获得部分价值.

Jon*_*art 8

针对x86和x64 的英特尔指令集参考未提及INC指令的对齐要求.它所说的全部LOCK是:

该指令可与LOCK前缀一起使用,以允许指令以原子方式执行.

LOCK前缀的文件中指出:

LOCK前缀的完整性不受存储器字段对齐的影响.对于任意未对齐的字段,观察到存储器锁定.

  • "对高速缓存行中的高速缓存内存进行未对齐的16,32和64位访问"将始终以原子方式执行.但是,与此同时,它表示"然而,非对齐数据访问将严重影响处理器的性能,应该避免." ---所以,我绝对不同意任何人应该避免未对齐的行动.我只是声明指令*将按预期执行. (2认同)