思考 p和p每次执行时需要进行一些额外的操作对于p来说它首先必须在自己的缓沖区buf中写入至少m个数据此后p和p的同步可简单通过两个信号量来控制题目的一个变形是要求m≤(buf数据个数-buf数据个数)≤n那么信号量的初值就变成m和n若只有p向buf放入数据而p不放入数据到buf中则p最多可放m次因此设置信号量s初值为m此外每当p放入一个数据到buf中时则使信号量s增1即p增加一次放入数据到buf的机会反之若只有p向buf放入数据而p不放入数据到buf中则p最多可放n次因此设置信号量s初值为n此外每当p放入一个数据到buf中时则使信号量s增1即p增加一次放入数据到buf的机会
The PV code Using Pascal
begin var mutex=mutex=s=ms=n:semaphore; cobegin process p begin repeat; get data; p(s); p(mutex); 写数据到buf; v(mutex); v(s); //p每放入一个数据到buf同时使s增加1 end process p begin repeat; get data; p(s); p(mutex); 写数据到buf; v(mutex); v(s); //p每放入一个数据到buf同时使s增加1 end coend end 返回《操作系统之PV金典》 [] [] |