对 int 变量赋值的操作是原子的吗?
💡
原文中文,约5500字,阅读约需14分钟。
📝
内容提要
本文讨论了原子操作和支持原子操作的指令集,单处理器系统中可在一条指令中完成,多处理器系统中需使用特定指令前缀或指令保证原子性。X86架构可使用lock指令前缀实现,ARM架构早期版本使用SWP指令,后来版本使用LDREX和STREX指令。这些指令保证内存访问的原子性。
🎯
关键要点
- 原子操作是一种不可分割的操作,单处理器系统中可在一条指令中完成。
- 在多处理器系统中,需使用特定指令前缀或指令保证原子性。
- X86架构使用lock指令前缀实现原子操作,ARM架构早期版本使用SWP指令。
- X86指令集中的lock前缀用于锁定前端串行总线,确保指令执行时不受干扰。
- ARM架构早期通过关闭CPU中断实现原子操作,SWP指令用于同步而非原子操作。
- ARMv6及以后的版本引入LDREX和STREX指令,提供更灵活的原子内存更新。
- LDREX和STREX指令通过独占访存机制实现原子性,避免了SWP的局限性。
➡️