第3章进程同步与通信_2

上传人:hs****ma 文档编号:567918235 上传时间:2024-07-22 格式:PPT 页数:19 大小:277.50KB
返回 下载 相关 举报
第3章进程同步与通信_2_第1页
第1页 / 共19页
第3章进程同步与通信_2_第2页
第2页 / 共19页
第3章进程同步与通信_2_第3页
第3页 / 共19页
第3章进程同步与通信_2_第4页
第4页 / 共19页
第3章进程同步与通信_2_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《第3章进程同步与通信_2》由会员分享,可在线阅读,更多相关《第3章进程同步与通信_2(19页珍藏版)》请在金锄头文库上搜索。

1、第第3 3章章 进程同步与通信进程同步与通信 进程同步与互斥进程同步与互斥 经典进程同步问题经典进程同步问题 管程管程 AND信号量信号量 进程通信进程通信 本章要点本章要点 吃水果问题吃水果问题 取动物问题取动物问题 超市购物问题超市购物问题 生产者生产者消费者问题消费者问题 哲学家进餐问题哲学家进餐问题 3.2经典进程同步问题经典进程同步问题吃水果问题吃水果问题1使用信号量解决吃水果问题使用信号量解决吃水果问题1吃水果问题吃水果问题2使用信号量解决吃水果问题使用信号量解决吃水果问题2使用信号量解决吃水果问题使用信号量解决吃水果问题2取动物问题取动物问题使用信号量解决取动物问题使用信号量解决

2、取动物问题超市购物问题超市购物问题1超市购物问题超市购物问题2超市购物问题超市购物问题2生产者生产者-消费者消费者问题 有两组进程共享一个环形的缓冲池。一组进程被称为生有两组进程共享一个环形的缓冲池。一组进程被称为生产者,另一组进程被称为消费者。产者,另一组进程被称为消费者。 缓冲池是由若干个大小相等的缓冲区组成的,每个缓冲缓冲池是由若干个大小相等的缓冲区组成的,每个缓冲区可以容纳一个产品。区可以容纳一个产品。 生产者进程不断地将生产的产品放入缓冲池,消费者进生产者进程不断地将生产的产品放入缓冲池,消费者进程不断地将产品从缓冲池中取出。程不断地将产品从缓冲池中取出。 用信号量用信号量解决“生产

3、者生产者-消费者消费者”问题(初步设想)void consumer()/消费者进程消费者进程while (true) P(full); data_c = bufferj; j = (j + 1) % n; V(empty); consume the item in data_c; semaphore empty = n;semaphore full = 0;int i,j;ITEM buffern;ITEM data_p, data_c; void producer() /生产者进程生产者进程 while (true) produce an item in data_p; P(empty);

4、bufferi = data_p; i = (i + 1) % n; V(full); 用信号量用信号量解决“生产者生产者-消费者消费者”问题void consumer()/消费者进程消费者进程while (true) P(full); P(mutex); data_c = bufferj; j = (j + 1) % n; V(mutex); V(empty); consume the item in data_c; semaphore empty = n;semaphore full = 0;int i,j;ITEM buffern;ITEM data_p, data_c; void pr

5、oducer() /生产者进程生产者进程 while (true) produce an item in data_p; P(empty); P(mutex); bufferi = data_p; i = (i + 1) % n; V(mutex); V(full); 哲学家进餐哲学家进餐问题 五个哲学家,他们的生活方式是交替地思考和五个哲学家,他们的生活方式是交替地思考和进餐进餐。 哲学家们共用一张圆桌,围绕着圆桌而坐,在哲学家们共用一张圆桌,围绕着圆桌而坐,在圆桌上有五个碗和五支筷子,平时哲学家进行思圆桌上有五个碗和五支筷子,平时哲学家进行思考,饥饿时拿起其左、右的两支筷子,试图进餐,考,

6、饥饿时拿起其左、右的两支筷子,试图进餐,进餐完毕又进行思考。进餐完毕又进行思考。 这里的这里的问题是:问题是:哲学家只有在靠近他的两支筷哲学家只有在靠近他的两支筷子都拿到时才能进餐,而拿到两支筷子的条件是子都拿到时才能进餐,而拿到两支筷子的条件是他的左、右邻居此时都没有进餐。他的左、右邻居此时都没有进餐。semaphore chopstick5 =1,1,1,1,1;void philosopher (int i ) /*哲学家进程哲学家进程*/while (true) P(chopsticki); P(chopstick(i + 1) % 5); eating; /* 进餐进餐 */ V(c

7、hopsticki); V(chopstick(i + 1) % 5); thinking; /* 思考思考 */用信号量用信号量解决哲学家进餐哲学家进餐问题哲学家能顺利地进餐吗哲学家能顺利地进餐吗semaphore chopstick5 =1,1,1,1,1;void philosopher (int i ) /哲学家进程哲学家进程 while (true) if( i %2 = = 0 ) /偶数号哲学家偶数号哲学家 P(chopsticki); P(chopstick(i + 1) % 5); eating; /* 进餐进餐 */ V(chopsticki); V(chopstick(i + 1) % 5); thinking; /* 思考思考 */ 用信号量用信号量解决哲学家进餐哲学家进餐问题else /奇数号哲学家奇数号哲学家 P(chopstick (i + 1) % 5; P(chopsticki); eating; /* 进餐进餐 */ V(chopstick (i + 1) % 5; V(chopsticki); thinking; /* 思考思考 */ P84/ 4 9作业

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号