2026/2/12 13:16:00
网站建设
项目流程
东莞网站域名注册,广州电力建设有限公司网站,网站seo的优化怎么做,it外包的优点不包括原子操作#xff08;Atomic Operations#xff09;是并发编程和系统底层开发中的核心概念#xff0c;指不可被中断的、要么全部执行成功、要么完全不执行的操作。在多线程或多处理器环境中#xff0c;原子操作确保对共享数据的访问是线程安全的#xff0c;无需额外加锁。一…原子操作Atomic Operations是并发编程和系统底层开发中的核心概念指不可被中断的、要么全部执行成功、要么完全不执行的操作。在多线程或多处理器环境中原子操作确保对共享数据的访问是线程安全的无需额外加锁。一、核心特性特性说明不可分割性操作在执行过程中不会被其他线程或 CPU 中断。内存可见性操作结果对所有处理器/线程立即可见通常配合内存屏障。顺序一致性可选可通过内存序memory order控制操作的重排序行为。二、常见原子操作原语原语功能典型用途load原子读取变量值安全读取共享状态store原子写入新值安全更新标志位等exchange/swap原子交换旧值与新值并返回旧值实现自旋锁如test_and_setcompare_and_swap(CAS)若当前值等于期望值则更新为新值无锁数据结构、乐观并发控制fetch_and_add原子加法并返回加之前的值计数器、Ticket 自旋锁fetch_and_sub/fetch_and_and/fetch_and_or等原子复合操作位标志管理、引用计数等注这些操作通常作用于整型或指针类型且要求自然对齐如 4 字节对齐的 int。三、硬件支持不同架构提供不同的原子指令x86/x86-64LOCK前缀指令如lock xadd,lock cmpxchgxchg指令天然原子ARMLDREX/STREXLoad-Exclusive / Store-ExclusiveRISC-Vamo*指令如amoswap,amoaddd操作系统和编译器将这些指令封装为高级语言可用的接口。四、编程语言支持C11 / C11标准方式编辑#include stdatomic.h atomic_int counter ATOMIC_VAR_INIT(0); atomic_fetch_add(counter, 1); // 原子加 1编辑#include atomic std::atomicint flag{0}; flag.store(1, std::memory_order_release);GCC / Clang 内建函数兼容旧标准编辑// 已弃用但广泛使用 __sync_fetch_and_add(var, 1); __sync_bool_compare_and_swap(var, old, new); // 推荐__atomic 系列C11 风格 __atomic_load_n(var, __ATOMIC_ACQUIRE); __atomic_compare_exchange_n(var, expected, desired, false, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED);Rust编辑use std::sync::atomic::{AtomicUsize, Ordering}; static COUNTER: AtomicUsize AtomicUsize::new(0); COUNTER.fetch_add(1, Ordering::SeqCst);五、内存顺序Memory Ordering原子操作可指定内存序平衡性能与正确性内存序说明memory_order_relaxed仅保证原子性无同步或顺序约束最快memory_order_acquire读操作后禁止后续读写重排到之前用于“获取”锁memory_order_release写操作前禁止前面读写重排到之后用于“释放”锁memory_order_acq_rel同时具备 acquire 和 release 语义如 CAS 成功时memory_order_seq_cst全局顺序一致默认最安全但最慢示例自旋锁通常使用acquire加锁和release解锁语义。六、典型应用场景无锁Lock-Free数据结构如队列、栈、哈希表使用 CAS 实现线程安全。引用计数shared_ptr的引用计数使用fetch_add/fetch_sub。标志位与状态机如shutdown_flag用store/load安全通信。自旋锁与轻量级同步基于exchange或test_and_set实现。性能计数器多线程统计命中次数等。七、注意事项❌不是所有操作都是原子的普通i不是原子操作✅对齐很重要未对齐的原子操作可能退化为非原子或引发异常。⚠️避免过度使用原子操作仍有开销缓存行锁定、总线事务。不能替代所有锁复杂临界区仍需互斥锁。总结一句话原子操作是构建高效、正确并发程序的基石它以硬件支持的不可分割性实现无锁或轻量级的线程同步。掌握其原理、原语和内存模型是编写高性能并发代码的关键。