次饭,吃饭时间是5秒我是第5个哲学家,正在吃第1次饭,吃饭时间是7秒我是第0个哲学家,正在思考,思考时间是3秒我是第1个哲学家,正在吃第2次饭,吃饭时间是3秒我是第3个哲学家,正在思考,思考时间是6秒我是第1个哲学家,正在思考,思考时间是4秒我是第2个哲学家,正在吃第2次饭,吃饭时间是4秒我是第5个哲学家,正在思考,思考时间是8秒我是第4个哲学家,正在吃第2次饭,吃饭时间是6秒我是第0个哲学家,正在吃第3次饭,吃饭时间是2秒我是第2个哲学家,正在思考,思考时间是5秒我是第0个哲学家,正在思考,思考时间是3秒我是第1个哲学家,正在吃第3次饭,吃饭时间是3秒我是第1个哲学家,正在思考,思考时间是4秒我是第0个哲学家,正在吃第4次饭,吃饭时间是2秒
f我是第3个哲学家,正在吃第2次饭,吃饭时间是5秒我是第4个哲学家,正在思考,思考时间是7秒我是第0个哲学家,正在思考,思考时间是3秒我是第5个哲学家,正在吃第2次饭,吃饭时间是7秒已终止rootlocalhost
5讨论
上述代码中我只是用了改变申请资源次序的方法来预防死锁,在前面的问题分析是我也提到了,其预防死锁的方法并不唯一,下面讲讨论是用其他方法预防死锁问题。1是用互斥申请资源就是在同一时刻最多只可以有五位哲学家申请进餐,设置信号量mutex初始值为5,这样就保证了5个哲学家中至少有1人可以拿到两只筷子,从而避免死锁。
伪码:Mutex5;Pidii012345Thi
kwaitmutexwaitchopstickiwaitchopsticki1mod6sig
almutexeatsig
alchopstickisig
alchopsticki1mod6thi
k
2采用AND信号量机制AND的基本思想是,将进程所需要的所有资源一次性全部分配给它,但是要有一个资源不能分配给进程,则其他资源也不能分配给该进程(要么所需资源全分配,要么就直接不分配)。伪码:Pidi(i01234,5)Thi
k();swait(chopstickichopsticki1mod6);eatsig
al(chopstickichopsticki1mod6);thi
k
f6小结
1哲学家问题是进程管理中一个非常经典的例题,是实现多线程同步的问题,这个问题的实现对于我们对进程同步的问题的理解有促进作用。
2通过设计是我能够熟练的掌握wait和sig
al原语;通过对信号量的控制实现进程的互斥与等待;模拟多个进程之间的并发执行。
3在做的过程当中要不断的上网查阅资料来实现程序功能,课程设计多于的解决问题的能力,以及独立思考的能力都有所锻炼。
4实践是对理论学习的一个巩固r