通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。从而进一步加
深对于死锁问题的理解。掌握解决死锁问题的几种算法的编程和调试技术。练习
怎样构造管程和条件变量,利用管程机制来避免死锁和饥俄问题的发生。
实验要求:
在两个城市南北方向之间存在一条铁路,多列火车可以分别从两个城市的
车站排队等待进入车道向对方城市行驶,该铁路在同一时间,只能允许在同一方
向上行车,如果同时有相向的火车行驶将会撞车。请模拟实现两个方向行车,而
不会出现撞车或长时间等待的情况。您能构造一个管程来解决这个问题吗?
总结和分析示例实验和独立实验中观察到的调试和运行信息。分析示例实
验是否真正模拟了哲学家就餐问题?为什么示例程序不会产生死锁?为什么会
出现进程死锁和饥饿现象?怎样利用实验造成和表现死锁和饥饿现象?管程能
避免死锁和饥饿的机理是什么?您对于管程概念有哪些新的理解和认识?条件
变量和信号量有何不同?为什么在管程中要使用条件变量而不直接使用信号量
来达到进程同步的目的?示例实验中构造的管程中的条件变量是一种什么样式
的?其中的锁起了什么样的作用?你的独立实验程序是怎样解决单行道问题
的?您是怎样构造管程对象的?根据实验程序、调试过程和结果分析写出实验报
告。
(1) 登录系统,熟悉 linux 命令和用户界面。
(2) 分析问题并制定解决方案:利用 linux 的 IPC 的信号量机制完成实验。
(3) 编写程序代码 rw 以及 makefile 文件
(4) 编译并执行已经编写好的程序