「转载」Linux线程死锁

来源:互联网 发布:南风知我意温南百度云 编辑:程序博客网 时间:2024/06/06 05:05

转载
今天看到了这篇非常简洁但是由十分详细的关于死锁的文章,分享给大家瞅瞅,多支持原博哦:
http://blog.csdn.net/weixin_35140291/article/details/72959185

什么是死锁

死锁是两个或者两个以上的进程由于竞争资源而造成的,相互竞争系统资源或进行进程间的“永久”阻塞,如无外力作用,这些进程将永远不能向前推进。
死锁进程
陷入死锁状态的进程称为死锁进程,所占用的资源或者需要他们进行某种合作的进程就会相继陷入死锁,最终可能导致整个系统瘫痪。

产生死锁的四个必要条件

1.互斥:
一个资源一次只能被一个进程所使用,其他进程不能访问已分配给其他进程的资源

2.不可抢占:
一个资源仅能被它的占有进程所释放,不能被别的进程抢占(即当一个进程的优先级高于另一个占有资源的进程的优先级时,并不能强行抢占)

3.请求且保持:
进程至少已经保持了至少一个资源,但又提出了新的资源要求,而该资源又被其他进程所占用,此时请求进程阻塞,但是又对它已经获得的资源不释放,此时别的进程如果申请它的资源就也会出现阻塞。

4.环路等待:
当每类资源只有一个的时候,在发生死锁的时候,必然会出现一个资源的环形链。P1在等待P2占有的一个资源S2,P2在等待P1占有的一个资源S1。
前三个知识死锁存在的必要条件,第四个是充分条件。即使前三个条件存在,可能发生一系列事件导致不可解的循环等待,这个不可解的循环等待实际上就是死锁的定义。第四个条件里的循环等待之所以是不可解的是因为前三个条件的存在。因此,他们共同组合成为了死锁的充分必要条件。

原创粉丝点击