【操作系统百科】原子 RMW 操作
x86 LOCK 前缀、ARM LL/SC、ARMv8.1 LSE、RISC-V A 扩展——四种硬件原子原语的工程差异。本文讲 fetch_add/CAS/swap 成本、cache line bouncing、tearing 与内核 atomic API。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 5 篇文章 · 返回首页
x86 LOCK 前缀、ARM LL/SC、ARMv8.1 LSE、RISC-V A 扩展——四种硬件原子原语的工程差异。本文讲 fetch_add/CAS/swap 成本、cache line bouncing、tearing 与内核 atomic API。
当多线程争抢一把 mutex 保护的队列时,吞吐量随线程数增长反而下降——锁成了瓶颈。无锁队列用 CAS 循环取代互斥,换来真正的无阻塞并发,但也引入了 ABA 问题和内存回收的工程深渊。
Treiber 栈可能是最简单的无锁数据结构——只需要一个 CAS 操作就能完成 push 和 pop。但'最简单'不意味着'没有坑'。从 ABA 问题到伪共享,从指数退避到 elimination backoff,这个看似朴素的数据结构蕴含了并发编程最核心的设计权衡。
正确的无锁数据结构可以写出来。但代价比你想象的大。CAS 循环、ABA 问题、内存回收、x86 和 ARM 的行为差异——这篇从一行 compare_exchange 开始,到一个完整的无锁哈希表结束。
拆解 GitHub 高星'无锁'库的真实面目:隐藏的 mutex、被滥用的 memory_order_relaxed、以及 CAS 重试循环的阻塞本质。附 x86 vs ARM 上的行为差异实测。