首页 > 程序开发 > 软件开发 > 其他 >

多线程死锁的避免及处理方式

2018-05-17

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

  一、死锁

  1)提出

  多线程与多进程提高了系统资源的利用率,然而并发执行也会带来一些问题,如死锁。

  2)概念

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

  3)死锁在显示生活中的实例

  在一个计算机系统中,只有一个打印机和一个输入设备。进程一正在占用输入设备,同时又提出使用打印机的请求,而进程二正在占用打印机,同时提出使用输入设备,就这样,两个进程只能无休止的进行等待,两个进程就会陷入死锁状态。

  二、产生死锁的必要条件

  产生死锁必须同时满足以下四个条件

  1)互斥条件

  指进程对所分配的资源进行排他性使用,即在某一时刻,某一资源只能由一个进程占用,如果其他进程请求资源,则让其他进程进行等待,直到占用进程释放。

  2)请求和保持条件

  指进程已经占有至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

  3)不剥夺条件

  指进程占有某个资源后,在没有自己主动释放时,该资源不能被剥夺。

  4)环路等待条件

  指在发生死锁时,必然存在一个进程——资源的环形链,一个等待另一个被占用的资源。

  三、处理死锁

  特殊的处理方法:鸵鸟策略

  就像鸵鸟一样,遇到危险就将头埋在地底下,假装看不到,将危险忽略。虽然不算是一个算法,但在实际系统中是广泛使用的,所以在计算机操作系统中,死锁发生且影响系统正常运行时,手动干预—重新启动。

  1.预防死锁

  通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个。此方法较易实现,已被广泛使用,但会降低系统资源利用率。

  2.避免死锁

  在资源的动态分配过程中,使用某种方法去防止系统进入不安全状态。

  3.死锁检测并解除

  通过系统所设置的检测机构,可以及时发现与死锁有关的进程和资源,然后将进程从死锁状态中解脱出来,常用的措施是撤销或挂起一些进程(剥夺),以便回收某些资源,再将这些资源分配给已处于阻塞状态的进程,使之变为就绪态,使之继续运行,此方法实施难度比较大。

相关文章
最新文章
热点推荐