代码注释样例

/**

 * 资源请求者 <br/>

 * 

 * <code>

 * <pre>

 * 1. 所有的资源请求者形成一个双向链表

 * 2. tail表示最后的请求者,其prev指针指向更早些得请求者

 * 3. 在所有hold请求者中,U锁总是排在S锁之后。

 * 4. tail的next指向最后一个持有锁的对象或者等待中的远程锁存根(RXW)。所以加远程锁时根据tail.next的状态判断竞争是否成功。

 * 

 * +------+ →prev→ +------+ →prev→ ... +------+ →prev→ +------+ →prev→ +------+ →prev→ (null)  

 * | tail |        | wait |            | wait |        | hold |        | hold |  

 * +------+ ←next← +------+ ... ←next← +------+ ←next← +------+ ←next← +------+ 

 *    ↓                                                  ↑

 *    +-next---last-wait-node-or-null--------------------+  

 *               

 * </pre>

 * </code><br/>

 * 通过SUX锁解决并发问题<br/>

 * <p>

 * 请参考{@link Acquirable}<br/>

 * </p>

 * <p>

 * 本地锁请求者的状态按照以下规则进行转换:

 * <ul>

 * <li>S锁:LOCK_LSW -> LOCK_LS</li>

 * <li>U锁:LOCK_LUW -> LOCK_LU</li>

 * <li>X锁:LOCK_LXW -> LOCK_LX</li>

 * </ul>

 * 远程锁请求者的状态按照以下规则进行转换:

 * <ul>

 * <li>U锁:LOCK_GUW -> LOCK_GUR -> LOCK_GU</li>

 * <li>X锁:LOCK_GXW -> LOCK_GXR -> LOCK_GX</li>

 * </ul>

 * </p>

 * <p>

 * 锁状态名称由三个部分组成:

 * <ul>

 * <li>

 * 范围:

 * <ul>

 * <li>L:本地</li>

 * <li>G:全局。</li>

 * <li>R:远程,表示锁请求者在远程节点上。R锁是G锁在远程节点上的存根。</li>

 * </ul>

 * </li>

 * <li>

 * 类型

 * <ul>

 * <li>S:共享锁</li>

 * <li>U:可升级锁</li>

 * <li>X:独占锁</li>

 * </ul>

 * </li>

 * <li>

 * 等待状态

 * <ul>

 * <li>空:已经持有锁</li>

 * <li>W:等待加锁</li>

 * <li>R:持有本地锁,并且正在请求远程锁。tail.next不包含R状态的请求者。</li>

 * </ul>

 * </li>

 * </ul>

 * </p>

 * 

 * 

 * 

 */

猜你喜欢

转载自l62s.iteye.com/blog/1506627