读者与写者、生产者与消费者
2016-07-20 09:20
295 查看
1、读者写者
写者:写数据
读者:仅仅是读数据,不存在取走数据
写者与写者关系:互斥
读者与读者关系:没有关系
写者与读者关系:同步、互斥
解决方法:
1)读者优先:读者正在读,写者不能终止读者,直到读者读完,写者才能写入
2)写者优先:写者正在写,读者不能终止写者,直到写者写完,读者才能写入
2、生产者消费者
生产者:产生数据
消费者:取走数据
生产者与生产者:互斥关系
消费者与消费者:互斥关系
生产者与消费者:互斥、同步关系
生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
要解决该问题,就必须让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样, 也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。
3、区别
1)数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。
2)允许多个读者同时并发访问,而消费者却要互斥,写者不仅要和写者之间互斥,还要与读者也互斥,对于生产者/消费者只需与自身互斥。
本文出自 “LOVEMERIGHT” 博客,请务必保留此出处http://lovemeright.blog.51cto.com/10808587/1827955
写者:写数据
读者:仅仅是读数据,不存在取走数据
写者与写者关系:互斥
读者与读者关系:没有关系
写者与读者关系:同步、互斥
解决方法:
1)读者优先:读者正在读,写者不能终止读者,直到读者读完,写者才能写入
2)写者优先:写者正在写,读者不能终止写者,直到写者写完,读者才能写入
2、生产者消费者
生产者:产生数据
消费者:取走数据
生产者与生产者:互斥关系
消费者与消费者:互斥关系
生产者与消费者:互斥、同步关系
生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。
要解决该问题,就必须让生产者在缓冲区满时休眠,等到下次消费者消耗缓冲区中的数据的时候,生产者才能被唤醒,开始往缓冲区添加数据。同样, 也可以让消费者在缓冲区空时进入休眠,等到生产者往缓冲区添加数据之后,再唤醒消费者。
3、区别
1)数据一直都存在,不存在有空位才能写,有数据才能读的问题,写者写可以覆盖之前的值,读者不会消费数据,数据不会消失。
2)允许多个读者同时并发访问,而消费者却要互斥,写者不仅要和写者之间互斥,还要与读者也互斥,对于生产者/消费者只需与自身互斥。
本文出自 “LOVEMERIGHT” 博客,请务必保留此出处http://lovemeright.blog.51cto.com/10808587/1827955
相关文章推荐
- C,C++文件和目录操作的一些整理
- [李景山php]thinkphp核心源码注释|App.class.php
- STM32F429串口通信GPIO配置问题
- 百度2017暑期实习生编程题
- orbslam2-导航(1)-原理
- mysql 如何用一条SQL将一张表里的数据插入到另一张表 3个例子
- (来自知乎)Unity反射机制的理解
- java web开发(一) Java Web开发框架对比
- [李景山php]thinkphp核心源码注释|Build.class.php
- [线段树 单调栈] UNR #1 争夺圣杯
- Odd Even Linked List
- 【代码笔记】iOS-账号,密码记住
- php 微信分享自定义标题 图片 描述接口开发
- Android Studio中设置作者和创建日期等注释模板
- [李景山php]thinkphp核心源码注释|Cache.class.php
- MySQL索引之前缀索引和索引选择性
- Android 优雅的为RecyclerView添加HeaderView和FooterView
- 【代码笔记】iOS-账号,密码记住
- css字体家族
- UISwitch 开关状态