- 1、本文档共70页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北京交通大学计算机学院何永忠 第二章 进程管理 2.1 进程的基本概念 2.2 进程控制 2.3 进程同步 2.4 经典进程同步问题 2.5 管程 2.6 进程通信 2.7 线程 三个工人在一所教堂外面砌砖,一位牧师看到前去问道,“请问三位为何工作啊?”第一个工人说,“我砌砖只是为了生活,尽管我不喜欢这份工作。”第二个工人说,“我砌砖是为了学习一门手艺,做得也挺开心的。” 第三个工人说,“我砌砖是因为我正在构建加州最美最大的教堂。” 回顾 信号量值得物理意义 n =0 当前可用资源数为n n0: 等待进程数为-n 信号量操作的物理意义 wait(RS):申请一个资源RS。有资源就可继续执行,否则等待。 signal(RS):产生一个资源RS,当存在等待进程该资源的进程时则唤醒第一个。 信号量RS可以与一个资源或者多个资源相关(例如共享变量N),也可以不与任何真实的资源相关(例如先后关系中的信号量)。 记录型信号量实现互斥 process1: begin repeat wait(mutex); N=N-1; signal(mutex); until false; end 课堂练习 1、P1、P2共享M,如何正确实现他们的并发执行? P1:scanf(N) ;if(MN) M=M+1; P2: M=M-1;printf(M);printf(M+1); 2、P1-P4的同步互斥关系:{P1?P2,P1? P3,P2 ? P4,P3 ?P4}且P2、P3互斥。 2.4 经典进程同步问题 2.4.1 生产者—消费者问题 2.4.2 哲学家进餐问题 2.4.3 读者—写者问题 生产者?消费者问题背景 例子:视频播放器 输入进程,解码进程。两个进程共享一个缓冲区buffer[N] 不断进行数据传递。输入进程不断把数据放入buffer, 解码进程从buffer中取出数据解码并输出 注意: 1、输入数据大大于buffer大小N,需要反复输入。 2、输入进程每次输入的数据大小为N。 生产者?消费者问题背景 问题 1、输入进程在将新读入的数据放入一个buffer前必须等待解码进程把buffer数据读完。 2、解码进程必须等待输入进程把输入的数据放入buffer后才能读取buffer中的数据解码后交输出。 生产者?消费者问题背景 输入进程是数据的生产者,解码进程是数据的消费者。 生产者—消费者问题具有很大的代表性和实用价值。 生产者?消费者问题分析 生产者P和消费者C必须同步! P先生产数据,C后消费数据 C先释放空间,P后利用空间 生产者?消费者问题1个P,1个C,一个buffer Var buffer: array [0..n-1] of item; empty, full : semphore ?? 1, 0 ; Begin parbegin Producer; Consumer oarend end 生产者?消费者问题1个P,1个C,一个buffer Producer Repeat wait(empty); Read and put into buffer; signal(full); Consumr Repeat wait(full); Read from buffer; signal(empty); 生产者?消费者问题-更多 设置了一个具有n个缓冲区的循环缓冲,生产者进程可以将它所生产的数据放入一个缓冲区中,消费者进程可以从一个缓冲区中取得一个数据消费 同时有多个生产者,多个消费者 异步运行方式及彼此必须保持同步 生产者?消费者问题临界资源剖析 生产者?消费者程序变量设计 循环缓冲表示机制 一维数组buffer: array [0..n-1] of item; 输入指针in 指示下一个可以投放数据的缓冲区 初始值为0;变化方式:in ?? (in+1) mod n 输出指针out 指示下一个可以获取数据的缓冲区 初始值为0;变化方式:out??(out+1) mod n nextp/nextc暂存每次要生产或消费的数据 生产者?消费者程序-没有同步 produceri: Var nextp: item; begin repeat produce an item in nextp; buffer[in] ?? nextp; in ?? (in+1) mod n; until false; end 生产者?消费者程序-没有同步 consumerj: Var nextc: item; begin repeat nextc??buffer[out]; out
您可能关注的文档
- FullsoundRoHS培训教材20060224.ppt
- .给儿子的一封信.ppt
- FY12联想大篷车一期指导书0618.ppt
- 0-3岁敏感期特点.ppt
- g1.3概率的计算公式.ppt
- GA793.1-2008系统功能性能检验规范091007.ppt
- GB-T2828.1-2003抽样统计标准讲义.ppt
- GB1499-2007标准宣贯会(北京2008[1].1.7-8).ppt
- GB2828抽样检验标准的使用.ppt
- GB50204-2002修改对比情况.ppt
- 吉安县公开招聘专职文明实践员笔试备考试题及答案解析.docx
- 2025重庆枫叶国际学校招聘教师笔试备考试题及答案解析.docx
- 游机队电玩自制联网教程-tplink.pdf
- 2025重庆新华出版集团招聘1人笔试模拟试题及答案解析.docx
- 2025宜宾高新丽雅城市产业发展有限公司公开招聘笔试模拟试题及答案解析.docx
- 2025云南保山市龙陵县勐糯镇人民政府招聘合同制专职消防员1人笔试模拟试题及答案解析.docx
- 11.1生活中常见的盐 九年级化学人教版下册.pptx
- 6.1法律保护下的婚姻 高二政治《法律与生活》课件(统编版选择性必修2)(新版).pptx
- 文昌市中小学教师校园招聘29人笔试模拟试题及答案解析.docx
- 10.1.5 常见的酸和碱(第5课时)课件-九年级化学人教版下册.pptx
文档评论(0)