java - Cas操作会加锁吗

 胡宸宸 发布于 2022-10-25 06:40
  • cas
  • 问题:
    (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。

      2022-10-26 14:22 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有