操作系统生产者和消费者问题_第1页
操作系统生产者和消费者问题_第2页
操作系统生产者和消费者问题_第3页
操作系统生产者和消费者问题_第4页
操作系统生产者和消费者问题_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

生产者 消费者问题是一个经典的进程同步问题 已经属于化石级别的了 该问题最早由 Dijkstra 提出 用以演示他提出的信号量机制 要求设计在同一个进程地址空间内执行的两个线 程 生产者线程生产物品 然后将物品放置在一个空缓冲区中供消费者线程消费 消费者线程 从缓冲区中获得物品 然后释放缓冲区 当生产者线程生产物品时 如果没有空缓冲区可用 那么生产者线程必须等待消费者线程释放出一个空缓冲区 当消费者线程消费物品时 如果没 有满的缓冲区 那么消费者线程将被阻塞 直到新的物品被生产出来 要求设计并实现一个进程 该进程拥有一个生产者线程和一个消费者线程 它们使用 N 个不 同的缓冲区 N 为一个自定义的确定的数值 例如 N 32 需要使用如下信号量 一个互斥信号量 用以阻止生产者线程和消费者线程同时操作缓冲区列表 一个信号量 当生产者线程生产出一个物品时可以用它向消费者线程发出信号 一个信号量 消费者线程释放出一个空缓冲区时可以用它向生产者线程发出信号 看代码吧 pv 操作 生产者与消费者经典问题 author leaf include include include include include define M 32 缓冲数目 define P x sem wait 生产者放置产品的位置 int out 0 消费者取产品的位置 int buff M 0 缓冲初始化为 0 开始时没有产品 sem t empty sem 同步信号量 当满了时阻止生产者放产品 sem t full sem 同步信号量 当没产品时阻止消费者消费 pthread mutex t mutex 互斥信号量 一次只有一个线程访问缓冲 output the buffer void print int i for i 0 i M i printf d buff i printf n producer void producer for sleep 1 P empty sem pthread mutex lock in in M printf produce a product buffer buff in 1 print in pthread mutex unlock V full sem consumer void consumer for sleep 2 P full sem pthread mutex lock out out M printf consume a product buffer buff out 0 print out pthread mutex unlock V empty sem void sem mutex init semaphore initialize int init1 sem init int init2 sem init if init1 0 exit 1 mutex initialize int init3 pthread mutex init if init3 0 printf mutex init failed n exit 1 int main pthread t id1 pthread t id2 int i int ret sem mutex init create the producer thread ret pthread create if ret 0 printf producer creation failed n exit 1 create the consumer thread ret pthread create if ret 0 printf consumer creation failed n exit 1 pthread j

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论