-->
当前位置:首页 > 题库 > 正文内容

主观题:h417.(上海交通大学1996年试题)哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,......

Luz3年前 (2022-09-25)题库617
(上海交通大学1996年试题)哲学家甲请哲学家乙、丙、丁到某处讨论问题,约定全体到齐后开始讨论;在讨论的间隙四位哲学家进餐,每人进餐都需使用刀、叉各一把(假设每个哲学家进餐时都是先拿刀,再拿叉),餐桌上的布置如图2-6所示。请用信号量及P、V操作说明这四位哲学家的同步、互斥过程。


![image.png](~/e900c5f7-9ae2-498e-8dd3-f915f72bba95.png)







答案:解:

设置四个互斥信号量fork1、fork2、knife1、knife2,其初值均为1,分别表示资源叉1、叉2、刀1、刀2是否可用。

同步算法描述如下:

semaphore fork1, fork2, knife1, knife2;
fork1=fork2=knife1=knife2=1;
process Pa( ) //哲学家甲
{
while (1)
{
讨论问题;
P(knife1); //拿起右边的刀子
P(fork1); //拿起左边的叉子
进餐;
V(knife1); //放下右边的刀子
V(firk1); //放下左边的叉子
}
}
process Pb( ) //哲学家乙(4分)
{
while (1)
{
讨论问题;
P(knife2); //拿起左边的刀子
P(fork1); //拿起右边的叉子
进餐;
V(knife2); //放下左边的刀子
V(firk1); //放下右边的叉子
}
}
process Pc( ) //哲学家丙
{
while (1)
{
讨论问题;
P(knife2); //拿起右边的刀子
P(fork2); //拿起左边的叉子
进餐;
V(knife2); //放下右边的刀子
V(firk2); //放下左边的叉子(3分)
}
}
process Pd( ) //哲学家丁
{
while (1)
{
讨论问题;
P(knife1); //拿起左边的刀子
P(fork2); //拿起右边的叉子
进餐;
V(knife1); //放下左边的刀子
V(firk2); //放下右边的叉子
}
}
parbegin(3分)
Pa( );
Pb( );
Pc();
Pd( );
parend



发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。