死锁是如何工作的
能说是死锁是如何产生的吗?
好多面试的时候,都会遇到一个比较难得话题,死锁,既考虑业务的逻辑关系,也要考虑自己对于死锁理解的能力,
1.为什么会发生死锁
锁的好处,为了数据安全,但是会减少性能,降低并发虽然可以一定程度上解决并发的问题,但是依旧会发生死锁,导致锁未及时释放的从而,引发很大的问题,
2.死锁发生的条件(前提)
(1)互斥条件在当前时间中,计算机中的某个数据只能被一个线程所占用,其他线程要是访问,只能是等待
(2) 不可剥夺条件
某个线程获取的数据资源使用完成之前,不能由其他线程强行抢占(只能是当前线程自己释放)
(3)请求与保持条件
当前线程已经获取到一个资源,但是又想访问另一个资源, 但是请求的资源被其他线程正在调用,
举个例子:当前回到家,然后家想去上厕所,但是进入家里有一个大门,而且进入之后还要去厕所
进入大门--->获取厕所的锁--> (但是现在已经有人在厕所了)-->
只能等待,别人使用完厕所,再次使用这时候,当前的线程只能处于一个阻塞等待的状态;
(4)循环等待条件
当前系统中的各个线程是相互等待的,比如 A 线程要在使用 B 线程的资源,但是进程 B 请求进程 C 占用, 进程 C 请求的资源 进程 A 占用, 形成了循环等待条件
这个四个条件缺一不可,直至四个条件,都满足的时候,会发生死锁;
处理死锁的方式
预防死锁
避免死锁
检测死锁
解除死锁
一般情况下,我们要避免死锁,开始使用;
版权声明: 本文为 InfoQ 作者【卢卡多多】的原创文章。
原文链接:【http://xie.infoq.cn/article/3f63d542f57ea01bbb0109266】。文章转载请联系作者。
评论