http://www.kharebov.com

                                                                  【大发信誉平台注册】php开发如何避免文件死锁-PHP问题

                                                                  死锁

                                                                  死锁,它是操作系统或软件运行的一种状态:在多任务下,当一个或多个进程等待系统资源而资源又被系统本身或其它进程占用时,就形

                                                                  成了死锁。

                                                                  死锁发生的最常见形式是两个或多个线程等待被另一个线程占用的资源:

                                                                  死锁-1.png

                                                                  如果两个顺序同时发生,线程1将永远无法获得锁B,因为锁B被线程2占有。同时线程2也永远无法获得锁A,因为锁A被线程1拥有。

                                                                  死锁产生的条件

                                                                  死锁的发生必须具备以下四个条件:

                                                                  ①互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只被一个进程占用。如果此时还有其它进程请求资源,则

                                                                  请求者只能等待,直到占有资源的进程用完释放。

                                                                  ②请求和保持条件:指进程已经保持至]少一个资源,但又提出了新的资源请求,而该资源已被其他进程占用,此时请求进程阻塞,但又对

                                                                  自己已获得的资源保持不放。

                                                                  ③不剥夺条件:指进程已获得的资源,在使用结束之前,不能被剥夺,只能在使用结束之后自己释放。

                                                                  ④环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,…,Pn}中的P0正在等待一个P1占用的

                                                                  资源,P1正在等待P2占用的资源,……,Pn正在等待P0占用的资源。

                                                                  如何避免和处理死锁

                                                                  预防死锁:预防死锁的方法是使四个条件中的第二、三、四个条件之一不能成立,来避免发生死锁。

                                                                  ①加锁顺序:按同一顺序加锁。

                                                                  当多(个进程需要相同的多个锁,又按照不同的顺序加锁时,就很容易发生死锁。如果能保证所有的进程都按照相同的顺序获得)锁,那么死

                                                                  锁就不会产生。

                                                                  ②加锁时限:进程尝试获取锁时加上一定的时限。

                                                                  也就是说如果申请锁时超过了这个时限,该进程就放弃对该锁的请求,并释放所有已经获得的锁。然后过一 段随机的时间后重试。这段

                                                                  随机的时间让其它线程有机会尝试获取相同的锁,并且让该应用在没有[获得锁的时候继续进行。

                                                                  问题是,如果有非常多的进程同一时间去竞争同一批资源,即使有超时和回退机制,还是可能会存在某些进程反复尝试却始终得不到锁的

                                                                  问题。

                                                                  避免死锁:该方法是同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态

                                                                  分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:疑似尼康Z8相机规格曝光:6000万像素,支持16bit RAW照片 - 尼康Z8,尼康
                                                                  下一篇:没有了