二 真经之生产消费问题扩展(浙江大学)
假设缓沖区buf和缓沖区buf无限大进程p向buf写数据进程p向buf写数据要求buf数据个数和buf数据个数的差保持在(mn)之间(m<nmn都是正数)
问题分析 题中没有给出两个进程执行顺序之间的制约关系只给出了一个数量上的制约关系即m≤—buf数据个数-buf数据个数≤n不需要考虑缓沖区的大小只需要考虑两个进程的同步和互斥p向buf写数据比p向buf写数据的次数最少不超过m次最多不能超过n次反之也成立.所以是一个生产者和消费者问题将等式展开得()m≤(buf数据个数-buf数据个数)≤n()m≤(buf数据个数-buf数据个数)≤n由于mn都是正数等式只有一个成立不妨设()成立在进程p和p都没有运行时两个缓沖区数据个数之差为因此p必须先运行向buf至少写m+个数据后再唤醒p运行信号量s表示p一次写入的最大量初值为ns表示p一次写入的最大量初值为m
The PV code Using Pascal
begin var mutex=mutex=s=ns=m:semaphore; cobegin process p begin repeat get data; p(s); p(mutex); 写数据到buf; v(mutex); v(s); end process p begin repeat; get data; p(s); p(mutex); 写数据到buf; v(mutex); v(s); end coend end 返回《操作系统之PV金典》 [] [] |