首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

哲学家进餐问题的模拟【操作系统】

二、设计内容 哲学家进餐问题的模拟。 三、开发环境 windows环境,Myeclipse平台。...四、分析设计 【1】实验原理 哲学家进餐问题描述的是五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五只碗和五只筷子。他们的生活方式是交替地进行思考和进餐。...对于死锁问题可采取这样的几种解决方法: (1)至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐,最终总会释放出他所用过的两只筷子,从而可使更多的哲学家进餐; (2)仅当左右两只筷子均可用时,...【2】数据及程序结构 总共创建有四个类:哲学家进餐问题类,Philosopher类,ChopstickArray 类,Chopstick类。...实习中还有对LINUX操作系统内核代码的分析,使我们具体的认识了LINUX,了解其设计思想和功能模块,而在LINUX下的各种常用命令也要求我们熟练掌握。

41630

漫谈并发和并行:死磕哲学家进餐问题

我们这里就死磕一下其中的死锁问题哲学家进餐问题 哲学家进餐问题是描述死锁最经典的问题,我们后续整个文章都会以此为出发点来讨论,现在先列出来哲学家进餐问题描述。...文章组织 本文主要是讲哲学家进餐问题,因此有必要先回顾一些锁的知识,然后会通过四个版本的程序来解决哲学家进餐问题,最后一个简单的总结。 在这里先说明四个版本的程序有什么区别: 经典的内置锁解决方案。...Philosopher Thread[Thread-1,5,main] has thought 24410 times 0x04 版本3:ReentrantLock+超时取消 前面我们实现了两个版本的哲学家进餐问题...改进 根据前面原子变量的说明,我们有了哲学家进餐问题的新解法!!! 我们对代码进行了一些调整。取掉了Chopstick类,并对Philosopher做了较大的改动。...在上一个版本中,经常会出现只有一个哲学家进餐,其他在都持有一根筷子并在等另外一根。 在这个版本中,只要一个哲学家在理论上可进餐,那么他肯定就可以进餐

1.6K40
您找到你想要的搜索结果了吗?
是的
没有找到

6.哲学家就餐问题

哲学家就餐问题 有五个哲学家,他们的生活方式是交替的进行思考和进餐哲学家们公用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有5个碗和5支筷子。...平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐进餐毕,放下筷子又继续思考。...var chopstick:array[0……4] of semaphor 所有信号量被初始化为1 用记录型信号量解决哲学家进餐问题 第i个哲学家的活动可买描述为 repeat wait(chopstick...think; until false; 问题 假如5个哲学家同时饥饿而各自拿起左边的筷子,会使5个信号量均为0;当他们再试图拿起右边筷子时,都将无限期的等待。...用AND型信号量解决哲学家进餐问题 var chopstick: array[0...4] of semaphore := (1,1,1,1,1) 具体过程: repeat think; Swait

1.1K10

经典同步问题

哲学家进餐问题 假设有5个哲学家,他们的一生只在思考和吃饭之中度过。这些哲学家共用一个圆桌,每个哲学家都有一把椅子。...在圆桌上有5个碗和5个筷子,平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐哲学家进餐完毕,放下筷子又继续思考。...哲学家进餐问题是在多个进程之间分配多个资源而且不会出现死锁和饥饿形式的简单表示。 一个简单的解决方法是每只筷子都用一个信号量来表示。...think; ... } while (1); 这个方案保证没有相邻的哲学家在同时进餐。因此显而易见的是他可能引起的死锁情形是5个哲学家同时变得饥饿,那么他们将要吃饭。...(必须在临界区内有两只可用的筷子) 奇数哲学家先拿起他左边的筷子,接着拿起他右边的筷子,而偶数哲学家则先拿起右边的筷子,接着拿起左边的筷子 有关哲学家进餐问题的任何满意的解答方案必须保证没有一个哲学家会被饿死

51210

操作系统入门(三)进程间通信

进程间的相互作用 进程间的联系 -资源共享关系 -相互合作关系 同步机制应遵循的准则 - 空闲让进 - 忙则等待 - 有限等待 - 让权等待 读者-写者问题 只要求读的进程称为...)是只保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题 哲学家进餐问题 有五个哲学家,他们的生活方式是交替地进行思考和进餐。...哲学家们共用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐进餐毕,放下筷子继续思考。...解决办法: ①至多只允许四个哲学家同时进餐,以保证至少有一个哲学家能够进餐,最终总会释放出他所使用过的两支筷子,从而可使更多的哲学家进餐。...②仅当哲学家的左、右两支筷子均可用时才允许他拿起筷子进餐。 ③规定奇数号哲学家先拿他左边的筷子,然后再去拿他右边的筷子;而偶数号哲学家则相反。

54111

操作系统:经典进程同步问题的高级探讨

3.哲学家进餐问题 五个哲学家围坐在一个圆桌周围,每个哲学家面前都有一只碗,各碗之间分别有一根筷子,餐桌如下图。 哲学家的生活包括两种活动:即吃面条和思考。...当哲学家觉得饿时,他就分两次去取他左边和右边的筷子,每次拿一根(不能强行从邻座手中抢过筷子),如果成功,他就开始吃面条,吃完后把筷子放回原处继续思考。 初步分析:获得两根筷子时才可进餐。...哲学家进餐问题 筷子是临界资源,一段时间内只允许一个哲学家使用。可用一个信号量表示一根筷子。由五个信号量构成信号量数组。...第i个哲学家进餐过程可描述如下: 解决死锁的方法: (1) 最多只允许4个哲学家同时拿筷子,保证有一人能 够进餐。 (2) 仅当左、右两根筷子均可用时,才允许他拿起筷子。...(3) 奇数号哲学家先拿左边的筷子,偶数号先拿右边的筷子。 方法(1)的算法描述如下: 4.打瞌睡的理发师问题 问题描述:理发店有一名理发师、一把理发椅和几把座椅,等待的理发者可以坐在座椅上。

7810

CVTE2016春季实习校招技术一面回忆(C++后台开发岗)

问题七: Linux多线程同步方式 ?...问题十: 如何解决哲学家进餐问题? 答: 哲学家进餐问题是由荷兰学者Dijkstra提出的经典的线程和进程间步问题之一。...筷子是绝对互斥的,我们可以破坏其它三种条件来解决哲学家进餐问题。解决办法如下: (1)破坏请求保持条件 利用原子思想完成。即只有拿起两支筷子的哲学家才可以进餐,否则,一支筷子也不拿。...(3)破坏环路等待条件 解法一:奇数号哲学家先拿他左边的筷子,偶数号哲学家先拿他右边的筷子。这样破坏了同方向环路; 解法二:至多允许N-1位哲学家进餐,将最后一个哲学家停止申请资源,断开环路。...最终能保证有一位哲学家进餐,用完释放两只筷子,从而使更多的哲学家能够进餐。 ---- 面试官话风陡转,问我算法和数据结构是否学过,正式开始跟我聊算法与数据结构的问题

58511

ucoreOS_lab7 实验报告

这里我使用的是 Linux 下的系统已预装好的 Meld Diff Viewer 工具。...(不需要编码) 在完成本练习之前,先说明下什么是哲学家就餐问题哲学家就餐问题,即有五个哲学家,他们的生活方式是交替地进行思考和进餐。...; 首先分析 phi_take_forks_condvar 函数的实现,该函数表示指定的哲学家尝试获得自己所需要进餐的两把叉子,如果不能获得则阻塞,具体实现流程为: 给管程上锁; 将哲学家的状态修改为...HUNGER; 判断当前哲学家是否有足够的资源进行就餐(相邻的哲学家是否正在进餐); 如果能够进餐,将自己的状态修改成 EATING,然后释放锁,离开管程即可; 如果不能进餐,等待在自己对应的条件变量上...参考资料 http://www.ibm.com/developerworks/cn/linux/l-rcu/ http://www.diybl.com/course/6_system/linux/Linuxjs

1.5K20

进程同步经典示例 多线程上篇(五)

,管程会帮你解决所有的问题 哲学家进餐 ---- 由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题。...该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。...平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐进餐完毕,放下筷子继续思考。  ? 灰色大圆桌,黄色凳子,每个人左右各有一根筷子,小圆点表示碗。...(i+1)mod 5 是为了处理第五个人右边的是第一个的问题进餐完毕,又先放下他左边的筷子,然后再放右边的筷子。...,所以肯定不会死锁 (2)  仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐

1.1K30

ucore-lab7

练习0 填写实验,自行填写,懒得找了,可以参考kiprey 练习一 理解内核级信号量的实现和基于内核级信号量的哲学家就餐问题(不需要编码) 完成练习0后,建议大家比较一下(可用meld等文件diff...实际上就是解释ucore的哲学家就餐怎么实现的,内核级别的信号量怎么实现的,之后给出自己关于用户级别的信号量的设计方案,比较两者异同。 关于哲学家就餐问题,不知道为什么,代码里面有注释,中文的。。。...0到N-1 */ { down(&mutex); /* 进入临界区 */ state_sema[i]=THINKING; /* 哲学家进餐结束 */ phi_test_sema...练习二 练习二2: 完成内核级条件变量和基于内核级条件变量的哲学家就餐问题(需要编码) 首先掌握管程机制,然后基于信号量实现完成条件变量实现,然后用管程机制实现哲学家就餐问题的解决方案(基于条件变量)...最终效果如下,由于没有实现相应的哲学家就餐问题,make grade只有183,不过这不重要: 由于只是简化实现,因此并没有对写者加锁的代码。

88530

多线程互斥锁解决哲学家就餐问题

哲学家就餐问题是一个了解和练习线程间同步的非常好的小例子,题为 5 个哲学家(线程)围成一桌就餐,但是只有 5 只筷子(锁),一个人想要吃饭就必须要拥有左侧的筷子(锁1)和右侧的筷子(锁2)才能吃饭。...每一个哲学家刚进桌前都持有了自己左侧的筷子,这样所有人只有一只筷子都无法就餐,所以就要想办法去拿右侧的筷子,而因为右侧的筷子被别人持有,所以无法拿到,这个时间就成了死锁状态。...所以必须要有一个解锁的条件,那就是在哲学家尝试去拿右侧筷子的时候,如果失败了,那么将自己左手边的筷子放下,此时这个哲学家左侧人就可以持有他原来左手边的筷子来就餐了。...[5]; // 创建5个线程,并把结构体内容初始化后传递进去 for (i = 0; i < THREAD_COUNT; i++) { arg[i].pthread_idx = i;//线程ID,对应哲学家编号...arg[i].left = mutex[i];//锁1,对应哲学家左侧筷子 arg[i].right = mutex[(i + 1) % THREAD_COUNT];//锁2,对应哲学家右侧筷子 pthread_create

19610

操作系统学习笔记-信号量相关问题

哲学家进餐问题 问题描述: 一张圆桌上坐着5名哲学家,每两个哲学家之间的桌上摆一根筷子,桌子的中间是一碗米饭。哲学家们倾注毕生的精力用于思考和进餐哲学家在思考时,并不影响他人。...只有当哲学家饥饿时,才试图拿起左、右两根筷子(一根一根地拿起)。如果筷子已在他人手上,则需等待。饥饿的哲学家只有同时拿起两根筷子才可以开始进餐,当进餐完毕后,放下筷子继续思考。...这个问题中只有互斥关系,但与之前遇到的问题不同的是,每个哲学家进程需要同时持有两个临界资源才能开始吃饭。如何避免临界资源分配不当造成的死锁现象,是哲学家问题的关键。...方法二: 分析:根据“鸽笼原理”,只要最多只有四位哲学家并发争夺筷子进餐,那么肯定会有一位哲学家可以同时拿到两根筷子。...为此我们定义如下信号量: semaphore chopstick[5] = {1,1,1,1,1}; //用于实现对5根筷子的互斥访问 semaphore room = 4; //最多允许4为哲学家进餐

60520

多个线程为了同个资源打起架来了,操作系统是如何让他们安分的?

哲学家就餐的问题 先来看看哲学家就餐的问题描述: 5 个老大哥哲学家,闲着没事做,围绕着一张圆桌吃面; 巧就巧在,这个桌子只有 5 支叉子,每两个哲学家之间放一支叉子; 哲学家围在一起先思考,思考中途饿了就会想进餐...; 奇葩的是,这些哲学家要两支叉子才愿意吃面,也就是需要拿到左右两边的叉子才进餐; 吃完后,会把两支叉子放回原处,继续思考; 那么问题来了,如何保证哲学家们的动作有序进行,而不会出现有人永远拿不到叉子呢...方案二的问题 方案二虽然能让哲学家们按顺序吃饭,但是每次进餐只能有一位哲学家,而桌面上是有 5 把叉子,按道理是能可以有两个哲学家同时进餐的,所以从效率角度上,这不是最好的解决方案。...那么,一个哲学家只有在两个邻居都没有进餐时,才可以进入进餐状态。...方案四也可解决问题 方案四同样不会出现死锁,也可以两人同时进餐。 读者-写者问题 前面的「哲学家进餐问题」对于互斥访问有限的竞争问题(如 I/O 设备)一类的建模过程十分有用。

1.1K30

多个线程为了同个资源打起架来了,该如何让他们安分?

哲学家就餐的问题 先来看看哲学家就餐的问题描述: 5 个老大哥哲学家,闲着没事做,围绕着一张圆桌吃面; 巧就巧在,这个桌子只有 5 支叉子,每两个哲学家之间放一支叉子; 哲学家围在一起先思考,思考中途饿了就会想进餐...其他哲学家都不能动,只有这位哲学家用完叉子了,才能轮到下一个哲学家进餐。...方案二的问题 方案二虽然能让哲学家们按顺序吃饭,但是每次进餐只能有一位哲学家,而桌面上是有 5 把叉子,按道理是能可以有两个哲学家同时进餐的,所以从效率角度上,这不是最好的解决方案。...那么,一个哲学家只有在两个邻居都没有进餐时,才可以进入进餐状态。...方案四也可解决问题 方案四同样不会出现死锁,也可以两人同时进餐。 读者-写者问题 前面的「哲学家进餐问题」对于互斥访问有限的竞争问题(如 I/O 设备)一类的建模过程十分有用。

57930

Linux系统中的信号量机制

struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list; }; 在linux...问题分析:该问题貌似比a问题复杂的多,首先我们定义一个数组buffer[n],来表示n个缓冲区,还需要定义两个变量:in 表示要存入的缓冲区的下标,out表示要取产品的缓冲区的下标。...} 消费者进程 哲学家进餐问题...:五个哲学家共用一个圆桌,分别坐在周围的五张椅子上,在圆桌上有五只碗和五只筷子,他们交替进行思考和进餐。...哲学家饥饿时便试图取最靠近他的两只筷子,当同时获得两只筷子时便可用餐,用餐完毕后放下筷子。 问题分析: 五只筷子为临界资源,定义包含五个元素的信号量数组来实现对筷子的互斥使用。

2.5K60

冷月手撕408之操作系统(10)-经典同步互斥问题

“重点掌握生产者消费者问题” 操作系统的经典同步互斥问题主要是介绍了 几个经典的同步互斥问题,其中搞懂生产者消费者问题、读者写者问题;其他的问题其实都是这两个问题的衍生。...冷月点睛 生产者消费者问题 问题描述:一组生产者和一组消费者互斥的使用一些缓冲区,生产者负责生产产品到缓存区,消费者负责使用 生产者与消费者同步关系;生产者之间互斥关系;消费者之间互斥关系;使用缓存区也是互斥关系...确定信号量 mutex=1 表示缓存区互斥 ;empty = n 表示缓存区数量 ;full = 0 表示初始生产的数量 读者写者问题 问题描述:写者只能写,读者只能读。...写时不能读,读时也不能写 读者和读者是互斥关系;读者和写者是互斥关系 需要一个计数器来记录读者进程的数量 哲学家进餐问题 问题描述:每个哲学家在思考,饿了就吃饭。...2个哲学家中间有一支筷子,只有拿到2支筷子时才能开始吃饭 每个哲学家都是互斥关系 点击蓝字关注我! 每天收获知识仅需五分钟 如果这篇文章有帮助到您,可以给冷月一个关注或者点个赞白嫖一波

44120

并发模型:线程与锁(1)

并行程序解决问题的速度比串行程序快的多,因为其可以同时执行整个任务的多个部分。并行程序可能有多个独立执行块,也可能只有一个。...哲学家进餐问题 哲学家就餐问题:假设有五位哲学家围坐在一张圆形餐桌旁,做以下两件事情之一:吃饭,或者思考。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。...下面是哲学家进餐问题的一个实现: import threading import random import time class Philosopher(threading.Thread):...线程与锁(2)》 https://mp.weixin.qq.com/s/3AImdyFFVcfpLuUbG5kV0g 参考链接 Let’s Synchronize Threads in Python 哲学家进餐问题...References [1] 哲学家进餐问题: https://zh.wikipedia.org/wiki/%E5%93%B2%E5%AD%A6%E5%AE%B6%E5%B0%B1%E9%A4%90%

40210

基础知识_操作系统

生产者消费者问题 19. 哲学家进餐问题 20. 读者写者问题 操作系统基础知识与常见题目。 进程与线程的区别 进程是系统进行资源调度和分配的独立单位;而线程是CPU调度和分配的基本单位。...://www.jianshu.com/p/d811fb1017d3 6.参考:https://blog.leosocy.top/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3Linux-COW...哲学家进餐问题 题意:有五个哲学家,喜欢思考问题,思考完了就会饿,然后就要吃饭。现在有5个哲学家围坐在圆桌上,每个人右手边有1根筷子,每个哲学家需要获取左右手边的两根筷子才能吃面条。...方案三:对方案一再次改进,可以每次让奇数号哲学家“先拿右边筷子,再拿左边筷子”,让偶数号哲学家“先拿左边筷子,再拿右边筷子”。...=EATING){ state[i]=EATING; //条件符合,设置为进餐状态 V(s[i]); //表示i号哲学家的两根筷子都能拿了 } } void take_chopstick(int

41620

『操作系统』 进程的描述与控制 Part2 进程同步

利用记录型信号量解决哲学家进餐问题 方法1:增加一个信号量s,控制同时请求进餐人数, 初值为4....WRRW 哲学家就餐问题 问题描述 五位哲学家围桌而坐 哲学家在思考问题时不需要任何资源,思考完问题后进入进餐态。 每人必须获得左右两支筷子才能进餐。 1....利用记录型信号量解决哲学家进餐问题 放在桌子上的筷子是临界资源,在一段时间内只允许一个哲学家使用。为实现对筷子的互斥使用,用一个信号量表示一只筷子,五个信号量构成信号量数组。...死锁解决方法: 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕后释放出他用过的两只筷子,从而使更多的哲学家能够进餐。——限制并发执行的进程数。...think; } 方法2、利用AND信号量机制解决哲学家进餐问题哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐。本质上是AND同步问题

1.1K20
领券