线程死锁
来源:互联网 发布:java svn插件 编辑:程序博客网 时间:2024/06/05 05:51
什么是死锁
线程A需要资源X,而线程B需要资源Y,而双方都掌握有对方所要的资源,这种情况称为死锁。
死锁产生的4个必要条件是什么
1.互斥:存在这样一种资源,它在某个时刻只能被分配给一个执行绪(也称为线程)使用;
2.请求与保持:当请求的资源已被占用从而导致执行绪阻塞时,资源占用者不但无需释放该资源,而且还可以继续请求更多资源;
3.不抢占和不剥夺:执行者执行完成前不可被剥夺资源,只有资源占用者自己才能释放资源;
4.循环和等待:若干执行绪以不同的次序获取互斥资源,从而形成环形等待的局面,想象在由多个执行绪组成的环形链中,每个执行绪都在等待下一个执行绪释放它持有的资源。
如何避免死锁,常见算法与原理。
只要上述四个条件中的一个不满足,就可以避免死锁,因此在分配系统资源时,应合理分配。
银行家算法思想:
银行家算法要求每个进程的最大资源需求,其基本思想是:始终保持系统处于安全状态,当进程提出资源请求时,系统先进行预分配,再判断系统分配后是否仍然处于安全状态。如果仍然处于安全状态,就进行实际分配;如果处于不安全状态,则拒绝该进程的资源请求。
相关数据结构:
1.最大需求矩阵:
其中行表示进程,列表示资源。
2.资源分配矩阵:a(t)
3.需求矩阵:b(t)
最大需求矩阵 = 分配矩阵 + 需求矩阵
阅读全文
0 0
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程-死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- 线程死锁
- jupyter配置scala和Spark学习环境
- Java上传文件到服务器
- 根据经纬度计算两点之间的距离的公式推导过程以及google.maps的测距函数
- 线程-线程控制
- Caused by: java.lang.IllegalStateException
- 线程死锁
- 浮点数比较
- LengthFieldBasedFrameDecoder使用示例
- 使用TensorFlow编写损失函数 交叉熵(cross entrophy)| 均方误差(MSE)
- Havel定理
- Shell判断字符串包含关系的几种方法
- iOS"死灰复燃SDK"
- 二叉树三种遍历方式的六种实现方法
- Linux C 父子进程 与 有名管道