有五个哲学家围坐在一圆桌旁,桌有一盘通心粉,每人面前有一只空盘子,每两人 之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉.为了吃通心粉,每 个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子 二、本程序防止死锁发生采取的措施:
仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子。这样要么一次占有两只筷子(所有线程需要的资源)进行下一步的吃通心粉,然后释放所有的资源;要么不占用资源,这样就不可能产生死锁了。 三、产生死锁的分配方式:
当筷子(资源)可用时,先分配左边的筷子,等待一会后再分配右边的筷子,由于这个过程中,左边的筷子一直没有释放,就有可能产生死锁了。 四、程序运行说明
程序运行过程中会弹出一个MessageBox提示操作者操作: 1.第一个对话框用于选择运行模式
a.选择yes 表示采用的是运行的防止死锁的方式,这样的话整个程序可以一直运
行下去,不会产生死锁。
b.选择no 表示运行产生死锁的方式会弹出第二个对话框。 2.第二个对话框用于选择运行时,线程运行的时间 a. 选择 res 线程时间比较短,很快就可以死锁
b.选择no 线程时间跟选择yes 时候的时间差不多,产生死锁的时间稍微长一点
五、关于哲学家就餐问题的mfc程序分析:
A. Dining.c 变量说明:
HINSTANCE hInst HWND hWndMain HBITMAP hbmpOffscreen BOOL bWaitMultiple BOOL bFastFood; extern int gDinerState[] extern int gChopstickState[] extern HANDLE gchopStick[PHILOSOPHERS]
函数说明:
应用实例句柄 主窗口句柄 位图句柄 用于选择等待的方式(要么死锁,要么一直循环运行) 用于选择进程等待的时间 用于表示哲学家的状态(外部接口) 用于表示筷子的状态 筷子的数组 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 处理消息函数: 根据进程调度的消息的不同处理不同的消息包括:关闭窗口,销毁资源,画窗口,和重画窗口等 BOOL CreateOffscreen() 获得当前窗口的一个位图句柄 void RenderOffscreen(HDC 通过位图句柄画演示的界面 hDestDC) 1.先画桌子,再画筷子,再画盘子, 2.再画哲学家: 哲学家用圆表示,根据哲学家的状态选择画笔(为resting 状态时为绿色圆圈,为等待或者,就餐时为红色圆圈) 3.最后画哲学家的手: 判断的依据是若筷子的编号和哲学家的编号一直致,那么认为这根筷子属于这个哲学家(筷子资源空闲)那么可以画手表示哲学家获得了这个筷子。(获得资源) BOOL 初始化应用窗口 InitApplication(HINSTANCE hInstance) BOOL 初始化主窗口 InitInstance(HINSTANCE 弹出选择对话框进行模式选择,并启动进程 hInstance, int nCmdShow) int PASCAL 调用前面的函数并对进线程消息进行处理 WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) B.Mutex.c 变量说明: 在Dining.c中定义是这个文件的外部接口 extern HWND hWndMain 在Dining.c中定义是这个文件的外部接口 extern BOOL bWaitMultiple 在Dining.c中定义是这个文件的外部接口 extern BOOL bFastFood int gDinerState[PHILOSOPHERS] 哲学家状态数组 int gChopstickState[PHILOSOPHERS] 筷子状态数组 HANDLE 筷子状态数组 gchopStick[PHILOSOPHERS] 函数说明:
1. DWORD WINAPI PhilosopherThread(LPVOID pVoid) 哲学家进程:
用于分配给哲学家筷子(资源)通过开始运行时候的对话框的选择来控制资源的分配方式:两中分配方式见二、三所述。通过随机产生的时间来控制线程的运行, 每个哲学家的状态都是resting waiting eating,一直循环。 2.int Diner(void)
用于建立互斥的信号对象(筷子)和启动哲学家进程
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务