好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

哲学家就餐问题.doc

3页
  • 卖家[上传人]:汽***
  • 文档编号:543420813
  • 上传时间:2023-02-19
  • 文档格式:DOC
  • 文档大小:35KB
  • / 3 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • /*inux进程的实现:哲学家就餐问题在 linux 上的程序实现设有5个哲学家,共享一张放油把椅子的桌子,每人分得一吧椅子.但是桌子上总共只有5支筷子,在每个人两边分开各放一支.哲学家只有在肚子饥饿时才试图分两次从两边拾起筷子就餐.  就餐条件是:  1)哲学家想吃饭时,先提出吃饭的要求;  2)提出吃饭要求,并拿到2支筷子后,方可吃饭;  3)如果筷子已被他人获得,则必须等待该人吃完饭之后才能获取该筷子;  4)任一哲学家在自己未拿到2支筷子吃饭之前,决不放下手中的筷子;  5)刚开始就餐时,只允许2个哲学家请求吃饭.  试问: 1)描述一个保证不会出现两个邻座同时要求吃饭的算法; 2)描述一个既没有两邻座同时吃饭,又没有人饿死的算法; 3)在什么情况下,5个哲学家全都吃不上饭? 哲学家进餐问题是典型的同步问题.它是由Dijkstra提出并解决的.该问题是描述有五个哲学家,他们的生活方式是交替地进行思考和进餐.哲学家们共用一张圆桌,分别坐在周围的五张椅子上.在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左右岁靠近他的筷子,只有在他拿到两支筷子时才能进餐.进餐完毕,放下筷子继续思考.*/#include #include #include #include #include #include //#include "RasUtil.h" using namespace std; const unsigned int PHILOSOPHER_NUM=5; const char THINKING=1; const char HUNGRY=2; const char DINING=3; sem_t semph[PHILOSOPHER_NUM]; // each fork has a semaphore pthread_mutex_t mutex; // Mutex for printing void* philosopherProc(void* param); int main(int argc, char* argv[]) { int i; srand(getpid()); pthread_t philosopherThread[PHILOSOPHER_NUM]; //定义线程数组 int phId[PHILOSOPHER_NUM]; pthread_mutex_init(&mutex, NULL); for (i=0; i

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.