如果一个生产者和一个消费者他们共享的缓冲器容量为可以存放 n 件物品,如何用 PV 操作来实现他们正确地同步。

作者:高老师 浏览 1

如果一个生产者和一个消费者他们共享的缓冲器容量为可以存放 n 件物品,如何用 PV 操作来实现他们正确地同步。
【正确答案】:设信号量 empty(表示缓冲器中可存放多少件物品)的初值为 n, 信号量 full(表示缓冲器中存有几件物品)的初值为 0。当缓冲器中没有放满 n 件物品时,生产者调用 P(empty) 都不会成为等待状态而可把物品存入缓冲器。但当缓冲器中已经有 n 件物品,生产者想再存入一件物品将被拒绝。每存入一件物品后,由于调用 V(full),,故 empty 的值表示缓冲器中可用的物品数,只要 full>0,消费者调用 P(full)后总可去取物品。每取走一件物品后,由于调用 V(empty),便增加了一个可用来存放物品的位置。用指针 k 和 t 分别指示生产者往缓冲器存物品和消费者从缓冲器中取物品的相对位置,它们的初值为 0,那么,一个生产者和一个消费者共用容量为 n 的缓冲器时,可如下进行同步工作:
设信号量 empty,full,初值为 empty=n,full=0;整型变量 k,t,初值 k=t=0。
生产者进程:
begin
L1:produce a product; P
(empty); B[k]:=product;
k:=(k 十 1)mod n;
V(full);
go to L1
end;消费者进程:
begin
L2:P(full);
take a product from B[t]; t:
=(t+1)mod n; V(empty);consume;
go to
L2end

📱 扫码体验刷题小程序

微信小程序二维码

扫一扫使用我们的微信小程序

热门题目

已复制到剪贴板