云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 典型问题

典型问题

  • 62 次阅读
  • 3 次下载
  • 2025/5/26 2:21:52

1.

有一个盒子,混装了数量相等的围棋白子和黑子。现在要用自动分拣系统把白子和黑子分开。设系统有两个进程P1和P2,其中P1拣白子,P2拣黑子。当一个进程在拣子时,不允许另一进程去拣。试写出这两个并发进程能正确执行的程序。

begin

mutex := 1; cobegin P1: begin repeat

P(mutex); 拣白子; V(mutex); until false end P2: begin repeat

P(mutex); 拣黑子; V(mutex); until false end coend end

加上“当以一进程拣了一子时,必须让另一个进程去拣”条件:

设置两个信号量S1和S2来协调进程P1和P2之间的同步。假定先让P1拣白子,则信号量S1和S2的初值分别为1和0。两个并发进程相应的程序如下: begin

S1 :=1; S2 := 0; cobegin P1: begin repeat P(S1); 拣白子; V(S2); until false end

P2: begin repeat P(S2); 拣黑子; V(S1); until false end coend end 2.

用P、V操作实现下述问题的解。

桌上有一个盘子,可以存放一个水果,父亲总是放苹果到盘子中,而母亲则总是放香蕉到盘子中;一个儿子专等吃盘中的香蕉,而一个女儿专等吃盘中的苹果。

由于父亲和母亲可以同时向盘子放水果,所以盘子是临界资源,应设置一个互斥信号量mutex来实现放水果的互斥,其初值为1.此外父亲和女儿,母亲和儿子之间存在同步关系,及分别设置信号量apple和banana来分别实现这种同步关系,其初值均为0。 4个进程的并发程序如下: begin

mutex := 1;

apple := 0; banana := 0; cobegin father: begin repeat

P(mutex);

向盘中放苹果; V(apple); until false; end; mother: begin repeat P(mutex);

向盘中放香蕉; V(banana); until false end; daughter: begin repeat P(apple);

取盘中的苹果; V(mutex); until false; end; son: begin repeat P(banana);

取盘中的香蕉; V(mutex); until false; end; coend; end;

升级版

桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,可向盘中放桔子;儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿3个并发进程的同步。 begin

mutex := 1;

apple := 0; banana := 0; cobegin father: begin repeat

P(mutex);

将水果放入盘中;

if 放入的是桔子 then V(orange) else V(apple); until false; end;

daughter: begin repeat P(apple);

取盘中的苹果; V(mutex); until false; end;

son:

begin repeat P(orange);

取盘中的香蕉; V(mutex); until false; end; coend; end;

桌上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘子放苹果,妈妈专向盘子中放桔子;两个儿子专等吃盘子中的桔子,两个女儿专等吃盘子中的苹果。请用P、V操作来实现爸爸、妈妈、儿子和女儿之间的同步与互斥关系。

与上一例不同的是,现在盘子可以放入两个水果,因此除了互斥信号量mutex之外,还应对允许向盘中放入水果的个数进行计数,即再设置一个信号量empty,其初值为2.此外由于盘子中可以放两个水果,即当盘中有一个水果时,存在着既可以放有可以取得情况,因此,除了对放水果进行互斥外,对取水果也应进行互斥。此时,4个进程的并发程序如下: begin

mutex := 1; empty := 2; apple := 0; orange := 0; cobegin father: begin repeat P(empty); P(mutex);

向盘中放苹果; V(mutex); V(apple); until false end

mother: begin repeat P(empty); P(mutex);

向盘中放桔子; V(mutex); V(orange); until false end

daughteri(i = 1, 2;):

搜索更多关于: 典型问题 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

1. 有一个盒子,混装了数量相等的围棋白子和黑子。现在要用自动分拣系统把白子和黑子分开。设系统有两个进程P1和P2,其中P1拣白子,P2拣黑子。当一个进程在拣子时,不允许另一进程去拣。试写出这两个并发进程能正确执行的程序。 begin mutex := 1; cobegin P1: begin repeat P(mutex); 拣白子; V(mutex); until false end P2: begin repeat P(mutex); 拣黑子; V(mutex); until false end coend end 加上“当以一进程拣了一子时,必须让另一个进程去拣”条件: 设置两个信号量S1和S2来协调进程P1和P2之间的同步。假定先让P1拣白子,则

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com