Semaphore源代码

来源:6-3 J.U.C之AQS-Semaphore

红邮筒

2019-02-19

下面源代码的最后一个if的功能是“如果剩余的信号量许可数>=0,则设置可以获得的信号量许可数为remaining。”吗?可是逻辑运算符是或,就算remaining小于0,还是可以compareandsetstate成功保证if为真并返回remaining,看不懂这一行图片描述

写回答

1回答

Jimin

2019-02-19

你好,那一行的注释应该这样理解:

1)如果remaining < 0 , 那么就不会执行后面的 compareAndSetState(available, remaining) 操作,那么实际就不会扣减许可数,并把当前值(<0)返回给上一层,上一层处理返回为负的结果

2)反之就是remaining >= 0, 这时就会执行 compareAndSetState(available, remaining)  进行cas 更新许可数目,如果cas更新成功了,那么返回remaining,否则通过for(;;) 重新操作。

目前你看到的解释本质上就是对第二种情况的说明。

0
4
红邮筒
非常感谢!
2019-02-21
共4条回复

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程