“哲学家就餐问题”的思路是什么?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 08:30:49
“哲学家就餐问题”的思路是什么?

“哲学家就餐问题”的思路是什么?
“哲学家就餐问题”的思路是什么?

“哲学家就餐问题”的思路是什么?
有五个哲学家围坐在一圆桌旁,桌中央有一盘通心粉,每人面前有一只空盘子,每两人之间放一只筷子每个哲学家的行为是思考,感到饥饿,然后吃通心粉.为了吃通心粉,每个哲学家必须拿到两只筷子,并且每个人只能直接从自己的左边或右边去取筷子
#define N 5
void philosopher (int i)
{
while (true)
{
思考;
取fork[i]; 取fork[(i+1) % 5];
进食;
放fork[i]; 放fork[(i+1) % 5];
}
}
为防止死锁发生可采取的措施:
最多允许4个哲学家同时坐在桌子周围仅当一个哲学家左右两边的筷子都可用时,才允许他拿筷子()给所有哲学家编号,奇数号的哲学家必须首先拿左边的筷子,偶数号的哲学家则反之 为了避免死锁,把哲学家分为三种状态,思考,饥饿,进食,并且一次拿到两只筷子,否则不拿.
哲学家就餐问题解法(1)
#define N 5
void philosopher (int i)
{
while (true)
{
思考;
取fork[i]; 取fork[(i+1) % 5];
进食;
放fork[i]; 放fork[(i+1) % 5];
}
}
哲学家就餐问题解法(2)
#define N 5
#define THINKING 0
#define HUNGRY 1
#define EATING 2
#typedef int semaphore;
int state[N];
semaphore mutex=1;
semaphore s[N];
void test(int i)
{
if (state[ i ] == HUNGRY)
&& (state [ (i-1) % 5] != EATING)
&& (state [ (i+1) % 5] != EATING)
{
state[ i ] = EATING;
V(&s[ i ]);
}
}
void philosopher (int i)
{ while (true)
{
思考;
P(&mutex);
state[i] = HUNGRY;
test(i);
V(&mutex);
P(&s[i]);
拿左筷子;
拿右筷子;
进食;
放左筷子;
放右筷子;
P(&mutex)
state[ i ] = THINKING;
test([i-1] % 5);
test([i+1] % 5);
V(&mutex);
}
}
state[ i ] = THINKING
s[ i ] = 0
-----------
其实我还没有懂……

“哲学家就餐问题”的思路是什么? 哲学家就餐问题!求一份哲学家就餐问题的c++代码,不要伪代码! 哲学家就餐问题?操作系统设计.会吗. 六个哲学家就餐问题,用C/C++语言 线程同步实现跟五个哲学家的就餐问题要求差不多,就是人数换成了六个.要求用线程同步实现,可以用临界区、互斥量和事件,但不能用信号量.ps:身边有人说 是哪位哲学家最早提出“美是什么”的问题 哲学家的爱情是什么 哲学家吃饭问题*设有5个哲学家,共享一张放有5把椅子的桌子,每人分得一把椅子,*但是,桌子上共有5只筷子,在每人两边各放一只,哲学家们在肚子饥饿*时才试图分两次从两边拿起筷子就餐.*条 哲学家如何看问题的 谁有关于食堂就餐问题的数学模型论文 相遇问题的解题思路是什么阿 哲学家是如何看待问题的? 关于哲学家就餐问题中wait()的运用,以下这些代码是对的还是错的?是否解决了死锁问题class Fork {private boolean taken=false;synchronized void put() {taken=false;notify();}synchronized void get()throws InterruptedException 哲学家是什么? 哲学家是什么? 艺术家还是哲学家的问题请问柏拉图(好像是哲学家,不清楚,哲学区已发,在艺术区发一次)的爱情观是什么?是不是Gay啊? 英语翻译:我在就餐时发现了一些需要改进的问题 怎样解决食堂拥挤问题的数学建模主要分析就餐情况 你对哲学家的评价是什么?