一些读书随笔(2)
来源:互联网 发布:网络球型摄像机 编辑:程序博客网 时间:2024/05/16 17:42
1. 多个人做一件事情的时候,可能需要同步。如果不考虑执行顺序的情况下,每次得到的结果一样的,那么无需同步,但是,如果按照不同的执行顺序,得到不同的结果,而且其中只有部分结果是正确的,那么需要同步。如食堂排队,打饭员每次只能为一个人打饭打菜,如果一次为多个人打饭打菜可能会乱,这是不希望看到的,所以同步的办法是排队。从程序的角度分析,打饭员是临界资源,每次只能为一个人服务。在多线程环境下,用互斥锁实现,只有拿到互斥锁的线程,才能够访问临界区代码,访问完之后,需要释放互斥锁。研究互斥同步比较的好的方法是,熟悉生产者和消费者问题。
2. 书中说明三种生产者消费者模型,第一种情况,多个生产者生产完成之后,再启动消费者消费,这种情况下,只需要同步生产者,只要一个生产互斥锁;第二种情况,生产者和消费者同步进行,但是消费者在无数据的情况下,需要等待生产者生产,消费者等待是属于轮询,对CPU造成一定的浪费,消费者使用生产者互斥锁。第三种情况与第二种情况相同,只是通过信号来实现生产者与消费者之间的同步。需要生产者互斥锁,消费者互斥锁,外加消费者条件变量。生产完成后,通知消费者消费,唤醒正在等待的消费者。消费者在等待时候调用pthread_cond_wait进入睡眠。书中描述了给条件变量发送信号的代码框架,摘录如下:
struct{ pthread_mutex_t mutex; pthread_cond_t cond; 维护本条件的各个变量} val = {PTHREAD_MUTEX_INITIALIZER,PTHREAD_COND_INITIALIZER,...};pthread_mutex_lock(&val.mutex);设置条件为真;pthread_cond_signal(&val.cond);pthread_mutex_unlock(&val.mutex);
书中维护条件变量为计数器,测试条件并进入睡眠用于等待条件为真的代码大体如下:
pthread_mutex_lock(&val.mutex);while(条件为真) pthread_cond_wait(&val.cond,&val.mutex);修改条件;pthread_mutex_unlock(&val.mutex);
为什么加while循环呢,当pthread_cond_wait返回时,我总是再次测试相应的条件是否成立,因为可能发生虚假的唤醒:期待条件尚不成立的唤醒。
3. 当进程持有锁期间终止,系统是如何处理的? 一种情况有系统来清理进程所包含的锁,另一种是需要自己安装退出时需要清理的锁。不过这种情况需要异常的小心,不能指望系统。
- 一些读书随笔(2)
- 一些读书随笔(1)
- 读书随笔
- 读书随笔
- 读书随笔
- 读书随笔一则
- 《影响力》读书随笔
- 《影响力》读书随笔
- 读书随笔-计算机科学导论
- 读书随笔_2016.3.18
- 【JAVA/读书随笔】网络
- 读书随笔总结
- 读书随笔1
- Python读书随笔
- 读书随笔1
- 读书随笔-《走出软件作坊》
- 《瓦尔登湖》读书随笔
- 《软件开发者路线图》读书随笔
- 汉诺塔问题递归算法分析
- 关于彩信协议简介
- Web 开发人员需知的 Web 缓存知识
- 我的J2EE之路
- 字符串匹配--KMP算法
- 一些读书随笔(2)
- 红黑树的原理分析和算法设计
- 黑马程序员-银行业务调度系统
- 数据库学习经验小结
- 游戏编程入门学习笔记31——菜单篇——虚拟键码到DirectInput键码的转换
- eclipse注释@author 的自定义
- 黑马程序员《.NET 面向对象》
- magento 单产品多图片批量上传技巧
- datagridview为某个单元格添加按钮