什么死锁:
是两个或者两个以上的进程由于竞争资源而造成的的一种相互等待的线性,如无外力作用,这些进程将永远不能再向前推进。
陷入死锁状态的进程称为死锁进程,所占用的资源或者需要他们进行某种合作的进程就会相继陷入死锁,最终可能导致整个系统瘫痪
死锁的常见情形:
一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁, 因此 就永远处于挂起等待状态了,这叫做死锁(Deadlock)。但只有一个线程一般情况下是不会去加锁的。
另一种典型的死锁情形是这样:线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线 程A和B都 永远处于挂起状态了。这样就是一个环路等待,产生了死锁。
资源的分类:
根据资源的性质:可剥夺(抢占)和不可剥夺(抢占)资源
可抢占资源:一资源占有进程虽然需要使用该资源,但另一个进程却强行把资源从占有进程中抢占过来。(cpu,主存,硬盘)
不可抢占资源;除了占有进程主动释放资源外,其他进程不得在占有进程使用资源的时候强行抢占。(打印机,读卡器)
产生死锁的必要条件:
1、互斥条件:
一个进程一次只能被一个进程所使用
2、不可抢占条件:
一个资源仅能被它的占有进程所释放,不能被别的进程抢占。
3、请求和保持条件:
进程至少已