Linux内核学习笔记六——并发和同步概念
来源:互联网 发布:苹果电脑的制图软件 编辑:程序博客网 时间:2024/06/18 11:13
一 临界区和竞争条件
临界区:访问和操作共享数据的代码段。
竞争条件:多个执行线程处于同一个临界区中。
处于竞争条件:造成访问的数据或者资源不一致状态:
对资源i的访问:ProcessA和B访问后得到正确的结果应该是9:
进程是并发执行,有可能得到的结果是:8
防止这种情况的发生:保证对资源的访问原子操作。
二 加锁
锁:采用原子操作实现,原子操作不存在竞争。
造成并发原因:
l 中断:随时可以打断当前执行的进程代码;
l 软中断和tasklet:任何时刻能唤醒调度软中断和tasklet,打断当前正在执行的代码;
l 内核抢占:当前任务被抢占;
l 进程睡眠:唤醒调度程序,执行新的进程;
l 多处理器:同时执行代码。
针对资源并发竞争条件的存在,需要对资源进行保护,保证资源的访问操作是原子的。
需要弄清楚哪些数据需要被保护,要试图弄清楚资源会不会被并发的访问操作。
三 死锁
多个执行线程互相等待被对方占用的资源,但永远不会释放各自拥有的资源,导致众线程永远无法得到执行。
出现死锁是件很危险的事情,预防死锁:
l 加锁顺序保持一致;
l 防止发生饥饿措施;
l 不要重复请求同一个锁;
l 复杂加锁方案造成死锁概率较大——设计锁力求简单;
四 锁的粒度
加锁粒度:描述加锁保护的数据规模;
过粗的锁:保护大块数据,如子系统所有数据结构;
精细的锁:保护小块数据,一个大数据结构中的一个元素;
在粗糙与精细之间需要平衡:精细的锁复杂开销大,良好扩展性:从单核到多核,为提高性能,锁得机制变得更细。
保护数据不被并发的访问,加锁你的代码。恰当的加锁:满足不死锁、可扩展、清晰简洁。
原文链接:http://www.cnblogs.com/bastard/archive/2012/09/19/2694243.html
- Linux内核学习笔记六——并发和同步概念
- Linux内核学习笔记六——并发和同步概念
- Linux内核学习笔记六——并发和同步概念
- Linux内核学习笔记七——内核同步机制和实现方式
- Linux内核学习笔记七——内核同步机制和实现方式
- Linux内核学习笔记七——内核同步机制和实现方式
- Linux内核学习笔记十——虚拟文件系统概念
- Linux内核学习笔记十——虚拟文件系统概念
- Linux内核学习笔记十——虚拟文件系统概念
- linux内核学习——内核同步
- LINUX内核同步学习笔记
- Linux内核学习笔记:内核同步
- Linux内核学习笔记:内核同步
- Linux内核学习笔记:内核同步
- linux内核学习笔记(六)进程调度
- Linux 内核中的并发--概念
- 学习笔记之Linux内核同步方法
- 个人学习笔记---linux内核同步
- Keil MDK v4.73发布了
- Chrome关闭提示?jquery 关闭窗口时 显示确认导航 window.onbeforeunload
- UVA 11292 Dragon of Loowater
- prml读书笔记(5.1 前馈神经网络函数)
- 友元函数和友元类
- Linux内核学习笔记六——并发和同步概念
- 设计模式之建造者模式
- java---字符串操作(分割,大小写转化,去除首末空格,截取字串,转化成字符数组)
- (5~7)编程小事、程序性能分析及粗略估算
- 各种排序算法比较
- Java中的类加载器
- Linux内核学习笔记七——内核同步机制和实现方式
- linux 下普通用户无法使用sudo命令的解决方法
- 详解Spring的applicationContext.xml