【每天一个小知识】死锁

简介: 死锁

什么是死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

最简单的死锁例子是自死锁,就是一个线程试图获得自己已经持有的锁,那么他将一直等待锁释放,而他自己一直在等待锁释放,所以他永远不会释放锁,结果就是死锁。

同样的道理,如果有n个线程n把锁,每个线程持有一把其他进程需要得到的锁,那么所有的线程都将阻塞等待直到自己需要的锁释放,造成死锁。如下面例子:

线程1

线程2

获得锁A

获得锁B

试图获得锁B

试图获得锁A

等待锁B

等待锁A

死锁产生的4个必要条件

  1. 互斥条件:一个资源每次只能被一个进程使用;
  2. 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
  3. 不剥夺条件: 进程已获得的资源,在末使用完之前,不能强行剥夺;
  4. 循环等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系;

号主:一枚机械专业本科生,经历了转行,从外包逆袭到芯片原厂的Linux驱动开发工程师,深入操作系统的世界,贯彻终身学习、终身成长的理念。平时喜欢折腾,寒冬之下,抱团取暖,期待你来一起探讨技术、搞自媒体副业,程序员接单和投资理财。【对了,不定期送闲置开发板、书籍、键盘等等】。

如果你想了解我的转行经验,欢迎找我交流~gongzhong号【哆哆jarvis】

一起不断探索自我、走出迷茫、找到热爱,希望和你成为朋友,一起成长~

相关文章
|
6月前
|
监控 算法 安全
|
3月前
死锁原因
死锁原因
36 1
|
6月前
|
安全 算法 程序员
|
6月前
|
SQL 存储 设计模式
如何与死锁斗争!!!
尽量不要改动线上数据库的字段,因为会触发锁表影响业务,严重时还可能出现死锁!数据库真的出现了死锁,业务全挂了,这种时候应该怎么办呢?本文就给大家分享一下数据库死锁的排查思路,万一出了问题,也有底气去解决。
61 1
|
6月前
|
安全 Java 测试技术
发生死锁怎么办
发生死锁怎么办
65 0
|
6月前
死锁的发生与避免
死锁的发生与避免 死锁是指两个或者多个进程在执行过程中,因争夺资源而造成的一种僵局,若无外力作用,它们都将无法推进下去。在计算机系统中,死锁是一种常见的问题,因此需要采取一些措施来避免死锁的发生。
|
12月前
|
算法 安全
死锁的总结(2)
死锁的总结
46 0
|
12月前
|
安全 算法
死锁的总结(1)
死锁的总结
32 0
|
算法 调度
死锁的理解
死锁的理解
81 0