同步互斥
2015-06-04 18:59
260 查看
独立进程:不和其他进程共享资源或状态;确定性、可重现;调度顺序不重要;
并发进程(一个时间段有几个,某个时间点只有一个):在多个进程间资源共享;不确定、不重现:共享资源、提高速度、模块化
新进程分配标识中的可能错误(给两个进程分配的pid相同),因为创建进程操作被切断
原子操作Atomic Operation:一次不存在任何中断或失败的操作(不存在部分执行,要么操作完成,要么没有执行)。
互斥mutual exclusion:一个进程占用资源,其他资源不能使用;
死锁deadlock:多个进程各自占用部分资源,形成循环等待;
饥饿starvation:一些进程轮流占用资源,一个进程一直得不到资源。
2、临界区
临界区critical section:进程中访问临界资源的一段需要互斥执行的代码,任何时候只允许一个进程。进入区entry section;退出区exit section;剩余区remainder section
临界区访问规则:空闲则入、忙则等待、有限等待(不能无限制等待)、让权等待(不能进入的,应释放CPU)。
实现方法:禁用中断、软件方法、更高级的抽象方法
(1)禁用硬件中断:没有中断,没有上下文切换,没有并发。进入临界区,禁止所有中断,并保存标志;离开临界区,使能所有中断,并恢复标志。缺点是:整个系统可能会因中断而退出,导致其他处于饥饿状态,临界区可能很长。
(2)基于软件,Peterson算法:满足线程Ti和Tj之间互斥的经典的基于软件的解决办法。(理解代码的含义)
Dekkers算法扩展到多个线程;n个线程的软件方法:Eisenberg和McGuire
(3)更高级的抽象方法:硬件提供一些原语
一个二进制变量(锁定/解锁):Lock::Acquire()一直等待,然后得到锁;Lock::Release()释放锁,唤醒任何等待锁的进程
原子操作指令:CPU体系结构中提供一些特殊的原子操作指令,不会部分处理的,有测试和置位指令Test-Set(先读取值,测试是否为1,内存单元值设为1),交换指令。
使用TS指令实现自旋锁spinlock
原子操作指令锁特征:优点是,适用于单处理机或共享主存的多处理器中的任意数量的进程同步;支持多临界区。缺点是:忙等待消耗处理器时间,可能导致饥饿;出现死锁:低优先级进程占用临界区资源,高优先级的请求获得处理机并等待临界区。
并发进程(一个时间段有几个,某个时间点只有一个):在多个进程间资源共享;不确定、不重现:共享资源、提高速度、模块化
新进程分配标识中的可能错误(给两个进程分配的pid相同),因为创建进程操作被切断
原子操作Atomic Operation:一次不存在任何中断或失败的操作(不存在部分执行,要么操作完成,要么没有执行)。
互斥mutual exclusion:一个进程占用资源,其他资源不能使用;
死锁deadlock:多个进程各自占用部分资源,形成循环等待;
饥饿starvation:一些进程轮流占用资源,一个进程一直得不到资源。
2、临界区
临界区critical section:进程中访问临界资源的一段需要互斥执行的代码,任何时候只允许一个进程。进入区entry section;退出区exit section;剩余区remainder section
临界区访问规则:空闲则入、忙则等待、有限等待(不能无限制等待)、让权等待(不能进入的,应释放CPU)。
实现方法:禁用中断、软件方法、更高级的抽象方法
(1)禁用硬件中断:没有中断,没有上下文切换,没有并发。进入临界区,禁止所有中断,并保存标志;离开临界区,使能所有中断,并恢复标志。缺点是:整个系统可能会因中断而退出,导致其他处于饥饿状态,临界区可能很长。
(2)基于软件,Peterson算法:满足线程Ti和Tj之间互斥的经典的基于软件的解决办法。(理解代码的含义)
Dekkers算法扩展到多个线程;n个线程的软件方法:Eisenberg和McGuire
(3)更高级的抽象方法:硬件提供一些原语
一个二进制变量(锁定/解锁):Lock::Acquire()一直等待,然后得到锁;Lock::Release()释放锁,唤醒任何等待锁的进程
原子操作指令:CPU体系结构中提供一些特殊的原子操作指令,不会部分处理的,有测试和置位指令Test-Set(先读取值,测试是否为1,内存单元值设为1),交换指令。
使用TS指令实现自旋锁spinlock
原子操作指令锁特征:优点是,适用于单处理机或共享主存的多处理器中的任意数量的进程同步;支持多临界区。缺点是:忙等待消耗处理器时间,可能导致饥饿;出现死锁:低优先级进程占用临界区资源,高优先级的请求获得处理机并等待临界区。
禁用中断 | 仅限于单处理器 |
软件方法 | 复杂 |
原子操作指令 | 单处理机,多处理机均可 |
相关文章推荐
- Spring源码追踪3——AOP机制
- Message和obtainMessage的区别
- 对课程的建议
- 迷宫寻宝(一)
- java的一些网络知识2
- 大家知道,每年的双11,都是购物狂欢节。
- 判断 iOS 设备类型
- [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)
- xcode6.3配置svn,详情教程,小白戳进来。
- UVA 1324 Bring Them There 拆点+打印解
- 搜狗输入法的评价
- Android中的文件下载——DownLoadManager
- Longest Substring Without Repeating Characters——经典题
- 常用EXE文件反编译工具
- 指向数组的指针
- Jenkins(二)
- 使用ReactiveCocoa限制UITextField只能输入正确的金额
- Codeforces Round #306 (Div. 2)
- 装B必备词汇
- 专利代理考前须知