并发编程中的算法与性能指标解析
在并发编程领域,解决临界区问题以及评估算法性能是至关重要的。下面将详细介绍Dekker算法解决临界区问题的原理,以及一些用于评估并发算法性能的指标。
Dekker算法解决临界区问题
Dekker算法用于解决临界区问题,为了证明该算法的正确性,需要检查线程执行的所有可能交织情况,确保每种情况都能得到预期结果。可以将线程间的所有可能情况归纳为以下四种:
1. 情况1:无冲突进入临界区
- 若进入临界区无冲突,Dekker算法会像之前的三种尝试一样,允许线程按需进入。例如,若线程T0准备访问临界区,它会将 Thread0WantsToEnter 设为1,然后检查 Thread1WantsToEnter 。若T1的请求标志为0(由中间while条件测试确定),T0会跳过中间while循环体并进入临界区。
2. 情况2a:T0是优先线程
- 假设T1正在临界区执行,T0希望进入。T0先将 Thread0WantsToEnter 设为1。当发现 Thread1WantsToEnter 的值为1时,T0会检查优先标志。若值为0,T0是优先线程,它不会执行if语句体,而是等待T1退出临界区并重置其请求标志。之后,T0会退出中间while循环并进入临界区。由于T0在自旋等待时 Thread0WantsToEnter 已设置且保持不变,在T0利用优先状态完成临界区执行之前,T1将被阻止进入临界区。
3.
超级会员免费看
订阅专栏 解锁全文
170万+

被折叠的 条评论
为什么被折叠?



