哲学家吃面问题. Thread DeadLock and Starvation
 If each Philosopher does the following, it can cause
while(true) {
    think();
    take_fork(i);
    take_fork((i+1)%5);
    eat();
    put_fork(i);
    put_fork((i+1)% 5);
}
A. Deadlock
B. Starvation
C. All above

我的问题是,为什么这个会导致 A 跟 B 。 答案是 C。 谢谢大神回答

0

1个回答

因为死锁,导致eat没有执行,所以饿死了。

4
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
多线程同步——哲学家吃饭问题
最近在学习多线程编程(WIN32API下和C++11标准),学习过程中想起了在学操作系统的时候出现过的“哲学家吃饭问题”,当时听得云里雾里的,理解并不算透彻。恰好最近在学习多线程同步的知识,恰好可以利用最近所学模拟一下这个过程。一、问题描述二、问题分析哲学家就餐问题需要协调考虑两个问题:1、不能让某个哲学家饿死;2、要尽量提升吃饭的效率,也就是同一时间尽量让多一些哲学家吃饭(最多同时两个)。我们考...
Linux下经典五位哲学家吃面模型分析
一、问题介绍        哲学家进餐问题是典型的同步问题。该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有一碗面和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐完毕,放下筷子继续思考。如下图所示:   2、解决办法  多线程版思路: 选用互斥锁mutex,如创...
操作系统综合实验之哲学家吃面问题和实验报告
本程序需要用到的数据有:5个哲学家和一张圆桌子,桌子旁边有5个座位,桌子上放着5支筷子,每两个座位之间放一支,为了吃面,哲学家必须获得一双筷子,且每人只能直接从紧邻自己的左边或右边去取筷子。 ①哲学家是进程,有四种状态,分别是等待任务、思考、饥饿、就餐,用不同图片表示哲学家状态。 ②筷子是进程运行所需要的资源,有两种状态:被占用和空闲,筷子图片为空白时,资源被占用。 ③进程运行时间是由随机函数随机产生的,随机函数是以当前逝去时间作为随机种子,进程运行时间。
哲学家就餐问题的思考(java实现)
前言这是我第一眼看到该问题时想到的解决方式之一,不知道可不可行,如果大家有什么看法可以探讨探讨。问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,n哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,n进餐完毕,放下筷子又继续思考。约束条件 (1)只有拿到两只筷子时,哲学家
哲学家就餐问题的解决方案(三种)
方案一 至多允许有四位哲学家同时去拿左边的筷子,然后在允许拿右边的筷子,最终能保证至少有一位哲学家能够进餐,并在用毕时能同时释放他用过的两只筷子,从而使更多的哲学家能够进餐 semaphore chopstick[5] = {1,1,1,1,1}; while(true) { /*当哲学家饥饿时,总是先拿左边的筷子,再拿右边的筷子*/ wait(chopstick[i]); wait(c...
哲学家吃饭问题---进程互斥与同步
目录 实验二 消费者生产者模型 1.1实验目的 1.2实验内容 1.3基本概念与原理 1.31 程序设计思想 1.32程序结构 1.33算法程序 1.34程序运行图   一些函数功能   1、库文件:#include <pthread.h> 2、数据类型: pthread_mutex_t       //互斥量 pthread_mutexattr_t  ...
(操作系统原理·第三章)五个哲学家吃通心面 问题
进程同步
哲学家问题
http://www.jb51.net/article/43712.htm 问题描述:一圆桌前坐着5位哲学家,两个人中间有一只筷子,桌子中央有面条。哲学家思考问题,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。上述问题会产生死锁的情况,当5个哲学家都拿起自己右手边的筷子,准备拿左手边的筷子时产生死锁现象。         第二个问题,在拿到左叉后,要查看右面的叉子是否可用。如果...
哲学家就餐问题与死锁总结
死锁的四个条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系 先写一个会造成死锁的哲学家问题。当所有哲学家同时决定进餐,拿起左边筷子...
哲学家吃面
哲学家吃面,多线程,解决死锁问题,java多线程
哲学家就餐问题解决方案(java)
什么是哲学家就餐问题 哲学家就餐问题是计算机科学中的一个经典问题,用于演示在并行计算中多线程同步时产生的问题。题目要求是:五位哲学家围着一张桌子而坐,他们不交谈,每人面前放了一碗饭,每两个人之间放了一只筷子(总共五只筷子)。哲学家只能做两件事,吃饭和思考,吃饭的时候不思考,思考的时候不吃饭。哲学家只有拿起自己身边的两只筷子才能吃饭,拿筷子的顺序是先拿左手再拿右手(不同时)。 题目分析 因为哲学家之...
信号量 哲学家进餐问题
linux环境下加gcc [文件名] -lpthread编译成功,运行时出现错误结果,相邻进程会同时进餐。发现是前一个进程修改之前,后一个在判断,同时修改chopstick数组,把数组某个元素的值该到了-1.所以需要改进。
JOOQ实战(一)
package jooptest; import com.panda.core.db.Dao; import com.panda.core.db.impl.DBService; import org.jooq.DSLContext; import org.jooq.Record; import org.jooq.Result; import org.jooq.impl.DSL; import o
mybatis 中 #{}带来的困惑
先看 xml 结构 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace=&q
尝试解决哲学家进餐问题(Java实现)
一. 问题描述 5个哲学家,5跟筷子,哲学家必须用两只筷子吃东西。他们只能使用自己左右手边的那两只筷子。做到不产生死锁以及要求高并发性。 二.  资源加锁法 直接给所请求的资源加锁,其他人想访问必须等待; package psy; /** * 哲学家线程 * @author stephenluu * */ public class PerThrea
PV操作经典例题——哲学家进餐问题
哲学家进餐问题: 五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五只碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有在他拿到两只筷子时才能进餐。进餐毕,放下筷子继续思考。 分析:放在桌子上的筷子是临界资源,在一段时间内只允许一位哲学家使用,为了实现对筷子的互斥访问,可以用一个信号量表示筷子,由这五个信号量构成信...
PV原语解决哲学家吃通心面问题之个人观点
PV原语解决哲学家吃通心面问题之个人观点 PV信号量有互斥信号量,整型信号量还有记录型信号量以及多信号量(如AND信号量、一般信号量集),我们这里采用互斥信号量和整型信号量来解决哲学家吃通心面问题。 我们先用代码(可能不满足具体的某种编程语言规范)来描述哲学家吃面问题的场景。(自然语言描述是五个哲学家围坐在一张圆桌旁,桌子中央一盘通心面(面假设无限),每个人面前有一只空盘,每两个人...
操作系统的哲学家就餐问题
今天我们来看一下哲学家就餐问题,这是很好的检测新设计出的进程同步原语的功能和性能。 问题:有5个哲学家,他们围坐在一张圆桌旁,哲学家只有三种状态,思考,等待筷子,吃面条。每个哲学家面前有一只空盘子,每两个哲学家之间有一支筷子,共五支筷子,每个人只能拿自己旁边的筷子,哲学家只能拿到两只筷子才能吃面条,当一个哲学家饿了,他就试图拿他最近的两支筷子,每次只能拿一支,次序不限,当他成功拿到两支筷
哲学家就餐问题学习笔记
场景:5个哲学家,5根筷子,5盘意大利面(意大利面很滑,需要同时两根筷子才能夹起来)大家围绕桌子,进行思考与进食的活到,如下图所示。 哲学家的活动描述: 哲学家除了吃面,还要思考,所以要么放下左右手筷子进行思考,要么拿起两根筷子开始吃饭(哲学家只能拿自己两侧的筷子吃面,不考虑卫生问题,要不两侧的都拿起来吃面,要么就不拿,处于思考状态。吃面和思考其实是交替进行的)。 如何安排哲学家...
哲学科吃面问题
一个有界面的哲学家吃面问题,内含源代码。
Java实现哲学家进餐问题(防死锁)
这篇博客与其他妖艳的骚货不同,它简单易懂(其实是高难度的不会),但是直指问题的本质。(另外和我一样是操作实习的同学不要抄我作业哦)问题描述:由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题。该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上五只筷子,他们的生活方式是交替地进行思考和进餐。平时,一个...
操作系统笔记:(十续) 哲学家就餐问题(java 实现)
关于哲学家就餐问题的完整解答可参见:Dining philosophers problem里面列出了3种解法: 服务生解法 资源分级解法 Chandy/Misra solution 这里会陆续给出3种解决方案服务生解法一个简单的解法是引入一个餐厅服务生,哲学家必须经过他的允许才能拿起餐叉。因为服务生知道哪只餐叉正在使用,所以他能够作出判断避免死锁。为了演示这种解法,假设哲学家依次标号为A至E。如果A
哲学家吃面问题.zip
哲学家吃面问题模拟,哲学家出于三种状态:思考、饥饿、吃面,系统产生随机数调用模拟哲学家吃面情况,代码由java编写,由7个类组成,按照MVC模式编写。课题是操作系统课程设计。内附实验报告
操作系统 实验报告(含代码) 死锁和饥饿2 哲学家就餐问题
哲学家的生活就是思考和吃饭,即思考,饿了就餐,再思考,循环往复。要求是: 每一个哲学家只有在拿到位于他左右的筷子后,才能够就餐;哲学家只能先拿左边的筷子,再去拿右边的筷子,而不能同时去抓他两边的筷子,也不能从其他哲学家手中抢夺筷子;哲学家每次就餐后必须放下他手中的两把筷子后恢复思考,不能强抓住餐具不放。设计一个程序,能够显示当前各哲学家的状态和桌上餐具的使用情况,并能无死锁的推算出下一状态各哲学家的状态和桌上餐具的使用情况。即设计一个能安排哲学家正常生活的程序。 3.2 问题描述 可能出现死锁问题,因为当五个哲学家都饥饿时,都拿着一支筷子,这样就可能五个哲学家都用不上餐。 3.3 解决方案(以下解决方案均可,实现一种) 3.3.1 最多允许4个哲学家同时坐在桌子周围。 3.3.2 给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之。 3.3.3 为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子,并且一次拿到两只筷子,否则不拿。
操作系统进程调度算法——哲学家进餐问题
问题描述:一个圆桌子上围坐着五个哲学家,他们的左手边分别摆了一支筷子,他们不听进行思考和进餐,当要进餐前只有同时拿到左右两支筷子的时候才能开始进餐。哲学家的编号用i表示,他们左手边筷子编号为i,右手边筷子编号为(i+1)%5。本文中哲学家只有在左右两支筷子都不被使用的时候才能拿起筷子进餐.。#include <iostream> #include <stdlib.h> us...
python解决哲学家就餐问题(死锁问题)
#哲学家就餐(解决死锁问题) import threading,time rlock1 = threading.RLock() rlock2 = threading.RLock() rlock3 = threading.RLock() rlock4 = threading.RLock() rlock5 = threading.RLock() class Zhexuejia(): def _...
哲学家就餐问题(java实现)
1、问题描述(死锁) 五个哲学家,五只筷子,只有获得一双筷子之后才能就餐,就有可能出现这种情况:每个哲学家都获得了一只筷子,卡死在那个地方。 2、解决哲学家就餐问题当然后很多方法: 参考链接:http://www.jb51.net/article/43712.htm (1)有一个服务生来负责避免死锁 (2)哲学家在拿筷子的时候,确保左右都有筷子才同时拿起左右两只筷子
转】死锁、活锁和饿死
转】死锁、活锁和饿死 《并行计算机互连网络》中死锁,活锁与饿死 :一组报文将永远被阻塞,每个报文总在请求其他报文占用的资源,而自己又占用着其他报文所请求的资源。 :在有些情况下,某些报文即使没有被永久阻塞,它们也不能到达相应的目的节点,这时是因为报文到达目的节点的所请求的通道被其他报文占用,报文只能围绕着目的节点却永远不能到达目的节点,这种情况为活锁。只有允许报文沿非最短路径发送时才会出
哲学家就餐问题与解决方案
http://blog.csdn.net/sunflowerfiona/article/details/52756819 1.进程互斥与同步,死锁基本知识 在多道程序环境下,进程有异步和同步两种并发执行方式。异步执行是指运行中的各进程在操作系统的调度下以不可预知的速度向前推进。异步执行的进程大多没有时序要求,不存在“执行结果与语句的特定执行顺序有关”的条件竞争。然而存在一类协作进程
【追光者系列】Hikari连接池大小多大合适?(第二弹)
摘要: 原创出处微信公众号 「工匠小猪猪的技术世界」欢迎转载,保留摘要,谢谢! 1.这是一个系列,有兴趣的朋友可以持续关注 2.如果你有HikariCP使用上的问题,可以给我留言,我们一起沟通讨论 3.希望大家可以提供我一些案例,我也希望可以支持你们做一些调优 首先推荐大家可以关注公众号看一下第一弹 【追光者系列】Hikari连接池大小多大合适? 1. fixed pool design ...
并发 生产者/消费者 读者/写者 哲学家进餐的理解
转载: 生产者/消费者问题 1.       对于生产者,只有货架不满时生产者才能进行生产,否则过剩无处放,没有生产的必要 2.       对于消费者,只有货架上有商品了才能进行购买消费 伪代码 读者/写者问题 与生产者/消费者问题不同的地方:1.数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。2.允许多个读
哲学家就餐问题——多线程代码学习
哲学家就餐问题,在网上看到一份代码,学习。。 #include //HADNDLE #include //#include //time(0) //#include #include "iostream" using namespace std; const unsigned int N=5; //哲学家数目 const int THINKING=1; //标记当前
vc++实现哲学家吃面问题
vc++实现哲学家吃面问题 演示死锁与永不死锁状态 代码比较简单 便于理解
java 多线程 死锁 哲学家就餐问题
现在你理解了,一个对象可以有synchronized方法或其他形式的加锁机制来防止别的任务在互斥还没有释放的时候就访问这个对象。你已经学习过,任务可以变成阻塞状态,所以就可能出现两种情况:某个惹我怒在等待另一个任务,而后者又等待别的任务,这样一直下去,直到这个链条上的任务又在等待第一个任务释放锁。这得到了一个任务之间相互等待的连续循环,没有哪个线程恩给你继续。这被称之为  死锁 。     如果
【追光者系列】HikariCP 源码分析之 evict、时钟回拨、连接创建生命周期
点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...
多线程处理哲学家就餐问题(GUI动态演示)
利用Java的多线程机制,以GUI形式动态演示解决哲学家就餐问题。
哲学家就餐与死锁问题,死锁产生的条件以及解决方案
哲学家就餐与死锁问题,死锁产生的条件以及解决方案
C# 多线程编程 经典模型 哲学家进餐问题
语言:C#   总起: 今天的哲学家进餐问题是最后多线程模型,讨论的是在有限的资源里线程竞争导致死锁、饥饿等问题。   没有接触过多线程编程的同学,可以先看一下第一章。   哲学家进餐问题: 该问题说的是,有5个哲学家围在一个圆桌前进餐,每个哲学家两旁有两把叉子,一共5把叉子。每个哲学家进行进餐需要拿起左右两把叉子,吃完之后将两把叉子放回供其他人使用。   这个是wiki上的图
操作系统:经典进程同步问题(2)哲学家进餐问题
知识总结: 互斥模式:互斥信号量赋初值一定是1 下面这种解决方法: 如果每个科学家都拿起相同方向的意志筷子就会导致每个人只能得到一个筷子,造成死锁! 解决方法: 方案1: 方案2: 方案3:
使用信号量解决哲学家饥饿问题
问题背景 最近操作系统课上看见了哲学家饥饿问题,很感兴趣就在网上搜索了一下. n哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,n哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,n进餐完毕,放下筷子又继续思考。 约束条件 (1)只有拿到两只筷子时,...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 区块链问题 ios视频开发问题