进程同步经典问题

发布时间:2024-11-08

1、有一个仓库可存放A、B两种零件,最大库容量各为m个。生产车间不断地取A和B进行装配,每次各取一个。为避免零件锈蚀,按先入库者先出库的原则。有两组供应商分别不断地供应A和B,每次一个。为保证配套和合理库存,当某种零件比另一种零件超过n(n<m)个时,暂停对数量大的零件的进货,集中补充数量少的零件。试用信号量与P、V操作正确地实现它们之间的同步关系。

var empty1,empty2,full1,full2:semaphore;

mutex,sa,sb:semaphore;

in1,in2,out1,out2:integer;

buffer1,buffer2 :array [0..m-1] of item;

empty1:=empty2:=m;

sa:=sb:=n;

in1:=in2:=out1:=out2:=0;

cobegin

{

process producer A

{ repeat

P(empty1);

P(sa);

P(mutex);

buffer1[in1] :=A零件;

in1:=(in1+1) mod m;

V(mutex);

V(sb);

V(full1);

untile false;

}

process producerB

{ repeat

P(empty2);

P(sb);

P(mutex);

Buffer2[in2] :=B零件;

in2:=(in2+1) mod m;

V(mutex);

V(sa);

V(full2);

untile false;

}

process take

{ repeat

P(full1);

P(full2);

P(mutex);

Take from buffer1[out1] and buffer2[out2]中的A、B零件;

out1:=(out1+1) mod m;

out2:=(out2+1) mod m;

V(mutex);

V(empty1);

V(empty2);

把A和B装配成产品;

until false

}

}

coend.

2、设有输入进程INPUT,缓冲区B1接纳输入内容。进程MAKER对B1中的内容加工后移送到B2。进程OUTPUT负责从B2中取出内容进行打印。设有一个无穷序列供INPUT输入,B1与B2的大小相同。请用PV过程写出三个进程同步工作的过程。

系统设置四个信号量:

B1full 缓冲区B1满,初值0

B1empty 缓冲区B1空,初值1

B2full 缓冲区B2满,初值0

B2empty 缓冲区B2空,初值1

3、有一个阅览室,共有100个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试用PV操作描述读者进程之间的同步关系。

算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。

读者进入阅览室的动作描述getin: while(TRUE){

P (seats); /*没有座位则离开*/ P(mutex) /*进入临界区*/ 填写登记表;

进入阅览室读书;

V(mutex) /*离开临界区*/ V(readers)

}

读者离开阅览室的动作描述getout: while(TRUE){

P(readers) /*阅览室是否有人读书*/ P(mutex) /*进入临界区*/ 消掉登记;

离开阅览室;

V(mutex) /*离开临界区*/

V(seats) /*释放一个座位资源*/ }

进程同步经典问题.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219