右边哲学家id问题
来源:5-15 高阶并发编程Coding训练:N种优化哲学家就餐问题的方法(3)

暗月zz
2022-11-29
var rPhi = phis[forks[rid] - 1];
这一行代码,右边哲学家id是左边哲学家右叉子id对应的哲学家id-1,请问为什么要-1呢,
按照位置关系,左边哲学家的右叉子就是右边哲学家的左叉子,右边哲学家的id应该是左边哲学家右叉子的索引+1才对吧。
写回答
1回答
-
明明是只幼刀
2022-11-29
哲学家数组 phis{1, 2, 3, 4, 5},代表着1 2 3 4 5号哲学家
叉子数组 forks{0, 0, 0, 0, 0},0代表无人占用,1-5代表哲学家占用
假设当前哲学家是3号哲学家,那么该哲学家在哲学家数组中对应的角标是phis[2],而4号哲学家对应的角标是phis[3]
我们通过this.right()得知3号哲学家右叉子序号rid=3
此时通过forks[rid]也就是forks[3]可以获取到当前占用该叉子的哲学家,结果是4,也就是4号哲学家,所以将4-1得到3就是4号哲学家的在数组中的角标
我们可以通过phis[rid]简单的编写达成同样的目的,但是我觉得老师这样写是因为更符合我们人的思考,先获取到占用该叉子的哲学家id,再获取哲学家本身
10
相似问题