文章详情页
java - Cas操作会加锁吗
浏览:180日期:2024-01-12 09:39:59
问题描述

问题:(1)不需要cas操作来加锁和解锁,这个怎么理解??cas操作不是如果比较不成功那么就一直尝试吗?和加锁有什么关系??这个该如何理解
问题解答
回答1:compare and swap操作不一定不需要锁,看平台,但是大多数平台都是支持无锁cas的。最简单的锁是通过test and set实现的自旋锁,当然通过cas也可以实现。
自旋锁在上锁失败时的确会不断尝试,耗尽cpu资源。如
while (flag.test_and_set()) { /* yield; */ } // 上锁flag.clear(); // 解锁
系统接口提供的锁,上锁失败时一般会挂起线程,类似
while (flag.test_and_set()) { flag.wait_for_unlock_signal(); } // 上锁
这里的wait_for_unlock_signal()是个假想函数。但是上锁依然依赖类似cas的原子操作。也就是说,现在锁都是通过一些基本的原子操作来实现的,如test and set和compare and swap。
标签:
java
相关文章:
1. android - Manifest.xml自己生成的GMS服务怎么删掉呢?2. java - git项目迁移到SVN怎么实现的?哪位大神指点指点3. css - 手机app中rem的基准值计算错误4. 站点内容复制额外增加的版权申明,真的很反人类。试问产品自己在用这个站点吗?5. 请问永久和临时重定向有什么区别6. 提示内部服务错误什么问题7. 关于thinkphp 5.1中,ajax提交数据url的格式写法,加花括号就出错,请老师指点8. 老师 我是一个没有学过php语言的准毕业生 我希望您能帮我一下9. 为什么要通过常量的方式拐弯抹角的写呢,直接写DSN之类的不好吗10. 绘制图表的问题
排行榜

网公网安备