死锁

1.死锁原因

1)资源竞争 

2)进程推进顺序非法(互相占有彼此需要的资源,同时请求对方占有的资源)

所谓死锁,通常指有两个线程T1和T2都卡住了,并等待对方完成某些操作。T1不能完成是因为它在等待T2完成。但T2也不能完成,因为它在等待T1完成。于是大家都完不成,就导致了死锁(DeadLock)

例子:

在某一个串行队列中,同步的向这个串行队列添加block。(进程推进顺序非法)

火车票 抢票 同时调用一个代码块 (资源竞争)

下图是进程推进顺序非法:

死锁_第1张图片

2.死锁的必要条件

产生死锁的四个必要条件:

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之

一不满足,就不会发生死锁。


五个案例让你明白GCD死锁

你可能感兴趣的:(死锁)