哲学家进餐问题
在多线程中如何避免死锁。
<wbr></wbr>
问题描述:有五位哲学家围绕着餐桌坐,每一位哲学家要么思考
要么等待,要么吃饭。为了吃饭,哲学家必须拿起两支筷子(分
别放于左右两端)不幸的是,筷子的数量和哲学家相等,所以每
只筷子必须由两位哲学家共享
<wbr></wbr>
一、使用数组来跟踪一个哲学家的的状态:吃饭,思考或是试图拿起筷子,规定一个哲学家只有在两个邻居都不再进餐时才允许转移到进餐状态。这种方法可以使系统获得最大的并行度,即最多允许两个哲学家同时进餐。
二、给每个哲学家编号,规定奇数号的哲学家先拿他的左筷子,然后再去拿他的右筷子;而偶数号的哲学家则相反。这样总可以保证至少有一个哲学家可以进餐。
一般都使用第二种方法,高效而简单。
普通解法,会死锁,不过还得等好一会。电脑速度这么快,也差不多等了五分钟以后才死锁。但是不管等多久死锁,理论上讲,死锁是早晚的事,所以还是防着点好。
可见,死锁的时候Process0——4都是waiting...状态
略加修改就不会产生死锁了。
分享到:
相关推荐
vc++ 多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区
Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程执行完的五种方法 Java多线程--等待所有子线程...
哲学家多线程 java
Java多线程--线程安全问题练习题
C# 窗体程序Winform 多线程练习摇奖器案例源码基于异步委托实现多线程摇奖器
多线程指南----详解,内容十分详细,新手必读书籍之一,多线程指南----详解,内容十分详细,新手必读书籍之一,
最近收集的VB.Net-C#多线程Thread-代理委托delegate编程。文章列表: c#.net多线程同步.txt C#WebBrowser页面与WinForm交互技巧一.txt C#多线程编程-多细全.txt C#多线程编程简单实例.txt C#多线程窗体控件安全访问....
多线程开发--基本多线程 MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程...
多线程编程-监控线程
进程与线程--里面都是一些小例子,非常易懂
chap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-2003.pptchap 8 多线程编程-...
linux下的多线程实例--生产者消费者 linux下的多线程实例--生产者消费者
操作系统--多线程买票---python--有窗体界面,就是操作系统课上的一个课外练习,传上去,保存下来。 exe文件在 map文件夹-->dict文件夹-->map文件夹-->map.exe 已经打包好了,没有python环境的电脑上也...
人工智能-项目实践-多线程-多线程爬虫--抓取淘宝商品详情页URL 本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的ip-proxy-pools-regularly结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的...
Visual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp).htmVisual C#中的多线程编程 - c#(csharp)....
java多线程学习-ftp上传
C++利用多线程实现哲学家进餐问题(解决死锁)
Java多线程--让主线程等待所有子线程执行完毕
java 多线程 哲学家思考问题 java 多线程 哲学家思考问题 ...java 多线程 哲学家思考问题java 多线程 哲学家思考问题java 多线程 哲学家思考问题java 多线程 哲学家思考问题 java 多线程 哲学家思考问题
VB多线程实例 - VBThread2 突破限制