8.1 经典进程同步问题-生产者消费者

问题描述

一组生产者进程和一组消费者进程共享一个初始为空、大小为n的缓冲区,只有缓冲区没满时,生产者才能把消息放入到缓冲区,否则必须等待;只有缓冲区不空时,消费者才能从中取出消息,否则必须等待。由于缓冲区是临界资源,它只允许一个生产者放入消息,或者一个消费者从中取出消息。

问题分析

  1. 关系分析。生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,他们也是同步关系。

  2. 整理思路。只有生产者和消费者两个进程,进程间存在着互斥关系和同步关系。只需在合理的位置设置PV操作即可。

  3. 信号量设置。信号量mutex作为互斥信号量,它用于控制互斥访问缓冲池,互斥信号量初值为1;信号量full用于记录当前缓冲池中“满”缓冲区数,初值为0。信号量empty 用于记录当前缓冲池中“空”缓冲区数,初值为n。

方案一:记录型信号量

生产者-消费者进程的描述如下:

semaphore mutex=1; //临界区互斥信号量
semaphore empty=n;  //空闲缓冲区
semaphore full=0;  //缓冲区初始化为空
producer () { //生产者进程
    while(1){
        produce an item in nextp;  //生产数据
        P(empty);  //获取空缓冲区单元
        P(mutex);  //进入临界区.
        add nextp to buffer;  //将数据放入缓冲区
        V(mutex);  //离开临界区,释放互斥信号量
        V(full);  //满缓冲区数加1
    }
}

consumer () {  //消费者进程
    while(1){
        P(full);  //获取满缓冲区单元
        P(mutex);  // 进入临界区
        remove an item from buffer;  //从缓冲区中取出数据
        V (mutex);  //离开临界区,释放互斥信号量
        V (empty) ;  //空缓冲区数加1
        consume the item;  //消费数据
    }
}

方案二:AND信号量

生产者-消费者进程的描述如下:

 semaphore mutex=1; //临界区互斥信号量
 semaphore empty=n;  //空闲缓冲区
 semaphore full=0;  //缓冲区初始化为空
 producer () { //生产者进程
     while(1){
         produce an item in nextp;  //生产数据
         AND_P(empty, mutex);  //同时获取空缓冲区单元和临界区访问权
         add nextp to buffer;  //将数据放入缓冲区
         AND_V(mutex, full);  //离开临界区,增加产品数量
     }
 }

 consumer () {  //消费者进程
     while(1){
         AND_P(full, mutex);  //同时获取产品和临界区访问权
         remove an item from buffer;  //从缓冲区中取出数据
         AND_V (mutex, empty);  //离开临界区,增加空缓冲区数量
         consume the item;  //消费数据
     }
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 也叫缓存绑定问题(bounded- buffer),是一个经典的、多进程同步问题。 单生产者和单消费者 有两个进程...
    穹蓝奥义阅读 69,403评论 0 25
  • ** 本文摘自汤小丹主编《计算机操作系统》(第三版)2.3 进程同步 ** 在 OS 中引入进程后,虽然提高了资源...
    刘帅_阅读 8,319评论 0 0
  • 本文摘自汤小丹主编《计算机操作系统》(第三版)2.4 经典进程的同步问 在多道程序环境下,进程同步问题十分重要,也...
    刘帅_阅读 10,154评论 1 1
  • 你正在经历着生活的低谷,“毕业即失业”在你的身上体现的淋漓尽致,你本以为你会迎来新的美好的篇章,不料,生活却像一道...
    矢车菊阅读 2,707评论 0 2
  • 若当前IP(偏移地址)=1800H,CS(段基址)=1200H,则存取下一条待取指令的内存地址是多少? 【解析】 ...
    0207_孙玲玉阅读 1,819评论 0 0

友情链接更多精彩内容