概念区分
2016-07-16 22:38
218 查看
1、程序、进程、线程简洁概括
程序是二进制文件,是永久性的,一个进程对应一个程序,一个程序可能对应多个进程
进程是承担分配系统资源的一个实体
线程是操作系统调度的基本单位
2、死锁产生的原因、产生的必要条件、产生的基本场景是什么?如何避免死锁?
产生原因:
(1)不同线程有交集
(2)使用锁不恰当
必要条件:
(1)互斥
(2)循环等待(不释放现有锁资源而申请锁资源)
(3)请求保持(请求新的锁资源,保持现有的锁资源)
(4)不剥夺
产生的基本场景:
(1) 同一线程先后两次调用lock, 第二次调用时,由于锁已被占用,该线程需要挂起等待别的线程释放锁,而锁被自己占用,该线程又被挂起而没机会释放锁,因此就永远处于挂起等待状态了
(2)线程A获得了锁1,线程B获得了锁2,线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和线程B就永远处于挂起等待状态了
避免死锁:
互斥这一属性不能破坏
对于循环等待:可释放现有锁
对于请求保持:可释放现有锁
对于不剥夺:优先级高可以剥夺
程序是二进制文件,是永久性的,一个进程对应一个程序,一个程序可能对应多个进程
进程是承担分配系统资源的一个实体
线程是操作系统调度的基本单位
2、死锁产生的原因、产生的必要条件、产生的基本场景是什么?如何避免死锁?
产生原因:
(1)不同线程有交集
(2)使用锁不恰当
必要条件:
(1)互斥
(2)循环等待(不释放现有锁资源而申请锁资源)
(3)请求保持(请求新的锁资源,保持现有的锁资源)
(4)不剥夺
产生的基本场景:
(1) 同一线程先后两次调用lock, 第二次调用时,由于锁已被占用,该线程需要挂起等待别的线程释放锁,而锁被自己占用,该线程又被挂起而没机会释放锁,因此就永远处于挂起等待状态了
(2)线程A获得了锁1,线程B获得了锁2,线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和线程B就永远处于挂起等待状态了
避免死锁:
互斥这一属性不能破坏
对于循环等待:可释放现有锁
对于请求保持:可释放现有锁
对于不剥夺:优先级高可以剥夺
相关文章推荐
- 组播的相关概念
- 路由基础概念解析
- 通过CSS Hack 区分 FF/IE7/IE6/IE5.5/IE5 代码推荐
- 编程语言里的静态、动态、强类型、弱类型等概念介绍
- 浅析C#与C++相关概念的比较
- C/S和B/S两种架构的概念、区别和联系
- Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法
- MongoDB快速入门笔记(二)之MongoDB的概念及简单操作
- 带领大家学习javascript基础篇(一)之基本概念
- JDK、J2EE、J2SE、J2ME四个易混淆概念区分
- qt入门必备
- MongoDB快速入门笔记(二)之MongoDB的概念及简单操作
- 鸟瞰数据结构的知识点全貌
- 基因芯片的相关概念
- 存储的一些基本概念(HBA,LUN)
- Android系统应用程序基本概念解读
- Trunk(端口汇聚)的概念与设置
- CDN概念
- oracle 11g RAC 的一些基本概念(四)
- weblogic集群介绍