信号量机制-课堂练习

信号量机制-课堂练习

ID:14820213

大小:79.00 KB

页数:15页

时间:2018-07-30

信号量机制-课堂练习_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《信号量机制-课堂练习》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用wait,signal操作解决进程的同步和互斥问题,绝大部分题目可以按以下步骤解决:⑴根据题目要求将每个进程的执行过程一步一步描述出来;⑵分析每个进程每一步的执行条件,将条件一一记录;⑶比较各个条件,将同一条件归为一个,若条件可以归结为一种资源,设置一个信号量表示;注意:这里是做题,不是实现系统,所以若某个条件题目中没有加以说明或限制,则删除;⑷设置信号量初值:若信号量是代表某种资源,则为系统初始时的可使用的资源数或可使用资源的进程数,若为互斥则为“1”;⑸重新分析每个进程的每个步骤:若该步骤有执行条件涉及信号量A,则在该步骤语句前加入wait(A);

2、若该步骤有执行后某个信号量B会增值,则在该步骤语句后加入signal(B);注意:若某个步骤前同时有几个wait操作,则一般同步信号量在前,互斥信号量在后;⑹题目已经做完,最后检查各个进程是否能按题目要求并发执行,若可以,停止;若不可以,检查上述过程,查找错误。例1有一个生产者和一个消费者共享容量为n的缓冲器(n均大于1),生产者把生产的物品存入缓冲器,而消费者从缓冲器中取出物品去消费。要求用wait,signal操作对生产者和消费者进行正确管理。第一步根据题目要求将每个进程的执行过程一步一步描述出来:生产者进程L1:生产一件产品;产品放入缓冲;goto

3、L1;消费者进程L2:从缓冲中区走产品;消费一件产品;gotoL2;第二步分析每个进程每一步的执行条件,将条件一一记录:生产者进程:生产一件产品的条件是有生产产品的原料,在题目中不曾提及,所以该条件不考虑,认为这一步骤没有限制条件;产品放入缓冲条件是要有产品、缓冲,由于前一步骤已经生产出产品,所以这一步骤执行是肯定有产品,这一步骤的限制条件是有缓冲;消费者进程:从缓冲中取走产品条件是缓冲中有产品和,这一步骤的限制条件是缓冲中的产品;消费产品的条件是应该是已获得产品,由于前一步骤已经获得产品,所以这一步骤执行是肯定有产品的,所以这一步骤没有限制条件;第三步

4、比较各个条件,将同一条件归为一个,设置一个信号量表示;根据第二步分析,本题中有四个限制条件:一个是缓冲,定义信号量empty;一个是产品,定义信号量full;15第四步设置信号量初值:empty,full是资源数量,系统初始状态应该是缓冲均空,无产品,所以empty=n,full=0。第五步重新分析每个进程的每个步骤,加入wait,signal操作:生产者进程:生产一件产品,无限制条件,且对上述四个信号量无影响;产品放入缓冲条件是缓冲,所以这条语句前加上wait(empty),这条语句执行完后,应该缓冲中产品会增加一个,所以这条语句后应加入signal(

5、full);消费者进程:从缓冲中取走产品条件是缓冲中有产品和无消费者从缓冲中取产品,所以这条语句前加上wait(full)),这条语句执行完后,缓冲会增加一个,所以这条语句后应加入signal(S1);消费产品无限制条件,且对上述四个信号量无影响。这样生产者和消费者进程的过程修改为:生产者进程L1:生产一件产品;wait(empty);产品放入缓冲;signal(full);gotoL1;消费者进程L2:wait(full);从缓冲中区走产品;signal(empty);消费一件产品;gotoL2;用一个数组B描述缓冲,k指示放产品的位置,t指示取产品的

6、位置,则完整的生产者消费者算法描述如下:semaphoreempty=n,full=0;itembuffer[n];intin=out=0;voidproducer(){while(1){…produceaniteminnextp;...wait(empty);buffer[in]=nextp;in=(in+1)modn;signal(full);}}15voidconsumer(){while(1){...wait(full);nextc=buffer[out];out=(out+1)modn;signal(empty);...consumetheit

7、eminnextc;…}}main(){cobegin{producer();consumer();}}第六步检查:其中wait(S1)和signal(S1)之间的程序段是各生产者的相关临界区,保证了生产者放产品的互斥;wait(S2)和signal(S2)之间的程序段是各消费者的相关临界区,保证了消费者的互斥;wait(empty)保证了有缓冲才可放产品,无缓冲时生产者等待;wait(full)保证了缓冲中有产品才可取产品,无产品时消费者等待;signal(empty)让消费者通知系统释放一个缓冲,有生产者等待缓冲时可将其唤醒;signal(full)

8、让通知生产者系统增加了一个产品,有消费者等待产品时可将其唤醒。符合题目要求,题目

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。