原子操作 CAS
假定有两个操作 A 和 B,如果从执行 A 的线程来看,当另一个线程执行 B 时,
要么将 B 全部执行完,要么完全不执行 B,那么 A 和 B 对彼此来说是原子的。
synchronized 关键字是基于阻塞的锁机制,也就是说当一个线程拥有锁的时候,
访问同一资源的其它线程需要等待,直到该线程释放锁
CAS操作如下:
CAS 实现原子操作的三大问题
ABA 问题。
因为 CAS 需要在操作值的时候,检查值有没有发生变化,如果没有发生变化
则更新,但是如果一个值原来是 A,变成了 B,又变成了 A,那么使用 CAS 进行
检查时会发现它的值没有发生变化,但是实际上却变化了。
循环时间长开销大。
自旋 CAS 如果长时间不成功,会给 CPU 带来非常大的执行开销。
只能保证一个共享变量的原子操作。
当对一个共享变量执行操作时,我们可以使用循环 CAS 的方式来保证原子操
作,但是对多个共享变量操作时,循环 CAS 就无法保证操作的原子性,这个时候
就可以用锁。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~