国内好的企业网站,成都设计公司排名简介,南京网站设计网站,泉州网站关键词优化5.4.5 慢路径锁的授予条件
当且仅当满足如下两个条件时#xff0c;才可以授予锁。
1. 其他线程没有持有不兼容类型锁。
2. 当前申请的锁的优先级高于请求等待列表中的。
首先通过锁位图判断等待队列#xff0c;不兼容则不能授予锁。再判断快速路径#xff0c;不兼容则不…5.4.5 慢路径锁的授予条件
当且仅当满足如下两个条件时才可以授予锁。
1. 其他线程没有持有不兼容类型锁。
2. 当前申请的锁的优先级高于请求等待列表中的。
首先通过锁位图判断等待队列不兼容则不能授予锁。再判断快速路径不兼容则不能授予锁。最后判断授予锁队列都兼容则授予锁不兼容需要遍历持有锁队列检查是否其他线程持有不兼容锁是则不能授予否则可以授予锁。
5.5 防止低优先级锁饥饿
AntDB-M按照优先级将锁又分了两类用于解决低优先级锁饥饿问题。
l 独占型(hog): X, SNRW, SNW; 具有较强的不兼容性优先级高容易霸占锁造成其他低优先级锁一直处于等待状态。
l 暗弱型(piglet): SW; 优先级仅高于SRO。
这两种类型锁会分别进行加锁计数。当授予hog类型锁时如果等待队列中有非hog类型则计数加1。当授予piglet类型锁时如果等待队列中有SRO则计数加1。针对计数是否超过阀值(max_write_lock_count)制定了四种优先级矩阵。在加锁授权检测时如果两种类型中有任一达到统计阀值则切换到对应的优先级矩阵重新检测是否可以授权此时优先级进行了反转会提升低优先级锁优先获取锁。当前等待队列里低优先级锁处理完毕后会重置对应的hog,piglet计数器并反转优先级。