- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Loading… … 生产者与消费者 张晨 内容介绍: 1、生产者-消息者问题 2、信号量 3、P、V原语 4、上机操作 张晨 生产者-消息者问题: 张晨 1、有n个生产者和m个消费者,共用k个缓冲区。生产者将产品消费出来后,放入空缓冲区中,消息者从缓冲区中取出产品。当缓冲区满时,生产者生产的产品不能放入缓冲区中;当缓冲区空时,消息者不能从缓冲区中取得产品。 2、生产者和消费者必须要满足如下条件: 1) 消费者想要接收数据,有界缓冲区中至少有一个单元是满的。 2) 生产者想要发送数据,有界缓冲区中至少有一个单元是空的。 3) 各生产者和各消费者进程之间必须互斥执行。 信号量: 1、信号量sem是一整数,在sem大于零时可代表可供并发进程使用的资源实体数,但sem小于零时,则表示正在等待使用临界区的进程数。建立一个信号量必须经过说明所建信号量所代表的意义,和赋初值以及建立相应的数据结构以便指向那些等待使用该临界区的资源。 张晨 2、信号量只有三种操作:赋值,P、V操作。 P原语、V原语: P原语的操作的主要动作是: 1)sem减1; 2) 若sem减1后仍大于或等于零,则进程继续执行 3) 若sem减1后小于零,则该进程被阻塞后与该信号相对应的队列中,然后转进程调度 张晨 V原语操作的主要动作是: 1)sem加1; 2)若相加结果大于零,则进程继续执行 3)若相加结果小于零,则从该信号的等待队列中唤醒一等待队列中一等待进程,然后再返回原进程继续执行或转调度进程。 单缓冲区生产者-消费者问题: semaphore empty=1, full=0; process producter() process consumer() { { while(true) while(true) { { produce(); P(full); P(empty); take from buffer; append to buffer; V(empty); V(full); consume(); } } } } 张晨 m个生产者n个消费者共享k件产品缓冲区的问题: semaphore empty=k; full=0; semaphore mutex; mutex1=1; process producter() process consumer() { { while(true) while(true) { { produce(); P(full); P(empty); P(mutex); P(mutex); take from buffer; append to buffer; out=(out+1) % k; in=(in+1) % k; V(mutex); V(mutex);
文档评论(0)