文章详情页
java - Cas操作会加锁吗
浏览:126日期: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. docker-compose 为何找不到配置文件?2. python的bs4如何筛选出h1标签中的内容3. angular.js - 通过数据中children的个数自动生成能点击展开的div4. css - 使用blur()滤镜为什么有透明的效果5. docker gitlab 如何git clone?6. android - 安卓做前端,PHP做后台服务器 有什么需要注意的?7. 前端 - css3 3d效果问题8. java - spring-data Jpa 不需要执行save 语句,Set字段就可以自动执行保存的方法?求解9. javascript - 移动端H5页面禁止缩放了,在浏览器上仍然可以缩放10. javascript - JS设置Video视频对象的currentTime时出现了问题,IE,Edge,火狐,都可以设置,反而chrom却...
排行榜
