- 1、本文档共120页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章并行性:互斥和同步课件
主要内容 顺序程序设计和并行程序设计 进程间的同步与互斥 信号量 (P,V操作) 同步机构应用 进程间的通讯 (2) 举例 [例2]. 两个进程合作完成数据计算和打印工作,计算进程未计算完就不可打印,反之亦然,双方共用一个缓冲区,写出此算法。 [分析]:合作同步 CP未写,PP取数无意义 PP未读,CP不能再放入(写)。 计算进程 打印进程 Buffer SA SB 写 读 CP PP CP PP 解:信号量:SA ––– 缓冲区是否有结果 SB ––– 缓冲区中数据是否已取走 初值:SA: = 0 SB: = 1 begin SA: = 0; SB: = 1; Cobegin CP: repeat send P(SB); {看看被取走否?SB=SB–1(当SB0} “ 计算下一数,进入缓冲区” V(SA); {已有结果,可置标志,SA=SA+1} forever PP: repeat P(SA); {已放入结果否?} “ 从缓冲区中取数” receive V(SB): {置空标志,让CP释放下一数} 打印该数据 output forever coendend [注记]:(a) 与P,V互斥比较 (i) 互斥一次进一个入cs,但谁先谁后无关系,而同步,先后次序有关。 (ii) 互斥:Lock,unlock 同步:P,V,互发信号 (b) 信号量的个数 SA ––– 数据 SB ––– 空 Buff (c) 初值:变化则程序也变化,{取代上面CP程序段} 若SB: = 0; CP: repeat “ 放入Buff ” V(SA); P(SB); forever 进程互斥:在OS中,当某一进程正在访问cs时,就不允许其它进程来读写(访问),否则就会发生后果无法估计的错误,进程之间的这种相互制约关系为进程互斥。 进程同步:并发进程在一些关键点上可能需要互相等待与互通消息,这种相互制约的等待与互通消息,称为进程同步。 进程同步与互斥关系:都反映了在异步环境下并发进程间的相互制约关系。可归于同步范畴,但互斥是同步问题的一个特例,互斥解决临界区的使用,同步是并发进程在一些关键点上需互相等待互发消息。 [例3]. 生产者 ––– 消费者问题:(producer –– Consumer Problem) [问题]:n个生产者(如计算进程)P1,P2…Pn m个消费者(如打印…) C1,C2…Cm 通过环形有界缓冲区联系,缓冲区存放产品。(缓冲区为共享资源)。 c 满 空 P1 P2 (i) Pi, Ci i = 1, 2, …, m, … n 并行 (ii) 缓冲区多个:指针的修改属互斥操作。 avail: 可用缓冲区数(剩余),初值i。 full ––– 已占用缓冲区数(产品数),初值为0。 mutex ––– 临界区互斥信号量,初值为“ 1”。 begin mutex: =1; avail: = i; full: =0 cobegin producteres (诸多生产者进程),以下以一为例 repeat “ 生产下一产品” P(avail); P(mutex); “ 送入缓冲区,调查指针”}cs V(mutex); [注]:送取数据可放 V(full); forever consumeres (诸多消费者进程) repeat P(full); P(mutex); “ 从缓冲区中取数,调整指针”}cs V(mu
文档评论(0)