生产者与消费者之间的同步与互斥问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
问题描述
• 一个仓库可以存放K件物品。生产者每生产一件 产品,将产品放入仓库,仓库满了就停止生产。 消费者每次从仓库中去一件物品,然后进行消费, 仓库空时就停止消费。 • 生产者与消费者问题是许多相互合作进程的一种 抽象。例如,在输入时,输入进程是生产者,计 算进程是消费者。在输出时,计算进程是生产者, 打印进程是消费者。
例 1
电子邮件信箱
1 2
……
n
发送进程 A
接收进程 B
Baidu Nhomakorabea
当信箱满时,发送进程只有等待接收进程取走信件, 当信箱空时,接收进程必须等待发送进程发送信件。
生产者与消费者之间的同步与互斥问题 同步问题:
1.只要缓冲池未满,生产者便可将消息送入缓 冲池,否则等待。 2.只要缓冲池未空,消费者便可从缓冲池中取 走一个消息,否则等待。
•进程间的关系 •生产者生产消息 后 消费者消费的合作 关系 •消费者消费 后 的空白缓冲块由生产者 生产消息的合作关系 •进程间在队列操作上的互斥关系
Var mutex, empty, full:semaphore∶=1,n,0; buffer:array[0, …, n-1] of item; in, out: integer∶=0, 0; proceducer:begin repeat producer an item nextp; wait(empty); wait(mutex); buffer(in)∶=nextp; in∶=(in+1) mod n; signal(mutex); signal(full); until false; end • consumer:begin • repeat • wait(full); • wait(mutex); • nextc∶ =buffer(out); • out∶ =(out+1) mod n; • signal(mutex); • signal(empty); • consumer the item in nextc; • until false; • end
Thank you !!
姚俊 朱景焕 宋聪 郭涛 欧阳睿 朱思勇 杨凝 熊伟 唐沐 万骞 闫弈潼
互斥问题:
1.生产者与生产者之间、消费者与消费者之间 互斥访问缓冲池。 2.生产者和消费者之间互斥访问缓冲池。
生产者/消费者问题
• 一个生产者,一个消费者,一个缓冲区 • 确定同步对象 • 确定同步约束条件 • 确定同步时机 • 定义信号量:考虑为每个同步对象设一个 信号量 • 用wait()操作判断同步条件是否满足 • 用signal()操作向其它同步对象发同步信号
相关文档
最新文档