- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
问题分析 为解决有限循环缓冲区生产者/消费者问题,应该设两个同步信号量, 用e表示空缓冲区的数目,初值为有界缓冲区的大小sizeofbuffer。 用n表示已用缓冲区的数目,初值为0。 由于有界缓冲区是一个临界资源,必须互斥使用,所以,另外还需要设置一个互斥信号量s,其初值为1。 问题的解 void consumer() { while (true) { semWait(n); semWait(s); take(); semSignal(s); semSignal(e); consume(); } } void producer() { while (true) { produce(); semWait(e); semWait(s); append(); semSignal(s); semSignal(n); } } const int sizeofbuffer = /* buffer size */; semaphore s = 1, n = 0, e = sizeofbuffer; void main() { parbegin (producer, consumer); } 在生产者—消费者问题中应注意 在每个程序中的多个semWait操作顺序不能颠倒。应先执行对资源信号量的semWait操作,然后再执行对互斥信号量的semWait操作,否则可能引起进程死锁! semSignal操作的次序倒是无关紧要。 参考习题5.21 作业 P173-182 复习题:5.5、5.7、5.8 习题:5.3、5.5、5.12、5.19、5.21、5.22 补充题: 桌上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘中放苹果,妈妈专向盘中放橘子;儿子专等吃盘子中的橘子,女儿专等吃盘子中的苹果。请用P、V操作实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。 * 原语操作被假设是原子的,即不能被中断 * 将该进程的PCB插入相应的等待队列末尾s.queue; 该进程状态置为等待状态 * 唤醒相应等待队列s.queue中等待的一个进程 改变其状态为就绪态 并将其插入就绪队列 第五章互斥与同步 知识点 并发的的概念 P141 理解并发包括 交替和重叠两种情况 同步和互斥的概念P141 表5.1 临界资源与临界区的概念P145 一般信号量的定义P150-151 一般信号量又叫计数信号量,它不是二元信号量 使用一般信号量解决简单的互斥和同步问题 P153 图5.6 使用一般信号量解决生产者消费者问题 图5.13 基本概念 并发:多个进程在同一时间间隔内执行。 并发包括重叠和交替执行两种情况。 并行:多个进程在同一时刻执行。 并行仅指重叠执行。 对于单一处理器,只可能并发,不可能并行。 对于多处理器,都可能。 基本概念 同步:对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。 互斥:同步的特例,当一个进程在临界区访问共享资源时,其他进程不能进入该临界区访问任何资源。 临界资源(critical resource):一次仅允许一个进程访问的资源。 例如:进程A、B共享一台打印机,若让它们交替使用则得到的结果肯定不是我们希望的。 临界资源可能是硬件,也可能是软件:变量,数据,表格,队列等。 并发进程对临界资源的访问必须作某种限制,否则就可能出与时间有关的错误,如:联网售票。 临界区(critical section):临界段,在每个程序中,访问临界资源的那段程序。 互斥机制 1965年,由荷兰学者Dijkstra提出 一种卓有成效的进程同步机制 最初提出的是二元信号量(互斥) 推广到一般信号量(多值)(同步) 5.3 信号量 基本原理 两个或多个进程可以通过简单的信号进行合作,一个进程可以被迫在某一位置停止,直到它接收一个特定的信号。 通过信号量s,进程可以执行semSignal(s)原语操作(或称为V操作)来发送信号; 进程也可以执行semWait(s)原语操作(或称为P操作)来接收信号。 如果相应的信号没有发送,则接收信号的进程被阻塞,直到信号发送完为止。 5.3 信号量 一般信号量 是一个记录型数据结构 定义如下: struct semaphore { int count; queueType queue; } 信号量说明: semaphore s; 信号量上的三个操作 初始化操作 一个信号量可以初始化成非负整数 semWait操作 semWait操作使信号量减1。如果值变成负数,则执行sem
文档评论(0)