右边哲学家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,再获取哲学家本身

1
0

笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机

深度剖析大厂面试高频真题,让你秒变offer收割机

1783 学习 · 314 问题

查看课程