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

红邮筒
2019-02-19
下面源代码的最后一个if的功能是“如果剩余的信号量许可数>=0,则设置可以获得的信号量许可数为remaining。”吗?可是逻辑运算符是或,就算remaining小于0,还是可以compareandsetstate成功保证if为真并返回remaining,看不懂这一行
写回答
1回答
-
你好,那一行的注释应该这样理解:
1)如果remaining < 0 , 那么就不会执行后面的 compareAndSetState(available, remaining) 操作,那么实际就不会扣减许可数,并把当前值(<0)返回给上一层,上一层处理返回为负的结果
2)反之就是remaining >= 0, 这时就会执行 compareAndSetState(available, remaining) 进行cas 更新许可数目,如果cas更新成功了,那么返回remaining,否则通过for(;;) 重新操作。
目前你看到的解释本质上就是对第二种情况的说明。
042019-02-21
相似问题