java - Cas操作会加锁吗
怪我咯
怪我咯 2017-04-18 10:52:40
0
1
693

问题:
(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。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!