作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
<分区>
这是一道作业题,我做错了。我真的很想了解这个问题的解决方案。原始代码状态:
图 2-46 中的解决方案是无死锁的,并且允许任意数量的哲学家实现最大并行度。它使用一个数组 state 来跟踪哲学家是在吃饭、思考还是饥饿(试图获得 fork )。如果邻居都不吃,哲学家只能进入进食状态。哲学家 i 的邻居由宏 LEFT 和 RIGHT 定义。换句话说,如果 i 为 2,则 LEFT 为 1,RIGHT 为 3。该程序使用一组信号量,每个哲学家一个,因此如果所需的 fork 忙,饥饿的哲学家可以阻止。
问题:考虑图 2-46 中的过程 put_forks。假设变量 state[i] 在两次调用 test 之后被设置为 THINKING,而不是之前。此更改将如何影响解决方案?
我是一名优秀的程序员,十分优秀!