死锁
死锁,它是操作系统或软件运行的一种状态:在多任务下,当一个或多个进程等待系统资源而资源又被系统本身或其它进程占用时,就形成了死锁。死锁发生的最常见形式是两个或多个线程等待被另一个线程占用的资源:
如果两个顺序同时发生,线程1将永远无法获得锁B,因为锁B被线程2占有。同时线程2也永远无法获得锁A,因为锁A被线程1拥有。
死锁产生的条件
死锁的发生必须具备以下四个条件:
①互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只被一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直到占有资源的进程用完释放。
②请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占用,此时请求进程阻塞,但又对自己已获得的资源保持不放。
③不剥夺条件:指进程已获得的资源,在使用结束之前,不能被剥夺,只能在使用结束之后自己释放。
④环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,…,Pn}中的P0正在等待一个P1占用的资源,P1正在等待P2占用的资源,……,Pn正在等待P0占用的资源。
如何避免和处理死锁
预防死锁:预防死锁的方法是使四个条件中的第二、三、四个条件之一不能成立,来避免发生死锁。
①加锁顺序:按同一顺序加锁。
当多个进程需要相同的多个锁,又按照不同的顺序加锁时,就很容易发生死锁。如果能保证所有的进程都按照相同的顺序获得锁,那么死锁就不会产生。
②加锁时限:进程尝试获取锁时加上一定的时限。
也就是说如果申请锁时超过了这个时限,该进程就放弃对该锁的请求,并释放所有已经获得的锁。然后过一 段随机的时间后重试。这段随机的时间让其它线程有机会尝试获取相同的锁,并且让该应用在没有获得锁的时候继续进行。问题是,如果有非常多的进程同一时间去竞争同一批资源,即使有超时和回退机制,还是可能会存在某些进程反复尝试却始终得不到锁的问题。
避免死锁:该方法是同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
死锁检测:它主要针对那些无法实现按序加锁并且加锁时限也不可行的情况。
通过设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源。然后采取适当措施从系统中将已发生的死锁清除掉。
每当一个进程获得了锁,会在进程和锁的相关数据结构中将其记下。并且,每当有进程请求锁,都会记录在这个数据结构中。当一个进程请求锁失败时,该线程可以遍历进程和锁的数据结构确认是否发生死锁。
例如:
进程A请求锁2,但锁2倍进程B占有,于是进程A等待进程B。同理,进程B等待进程C,进程C等待进程D,进程D等待进程A。进程A为了检测死锁,它需要递进地检测所有被B请求的锁。从进程B请求的所开始,进程A找到了进程C,然后找到了进程D。发现进程D请求的锁被进程A自己所占有,这样检测到发生了死锁。
当进程A检测到发生死锁之后,一个可行的方法是进程A释放自己占有的锁,回退,然后经过一段随机的时间后重试。这和加锁时限相似,不同是死锁已经发生了。
死锁解除:这是与检测死锁相配套的一种措施。
当发现有进程死锁时,应立即把它们从死锁状态中解脱出来。
一种方法是,剥夺资源。从其它进程剥夺足够数量的资源给死锁进程,以解除死锁状态。
还有一种方法是,撤销进程。最简单的撤销进程的方法是使全部死锁进程都夭折掉;稍微温和一点的方法是按照某种顺序逐个地撤销进程,这只有足够的资源可用。
推荐教程:PHP视频教程
以上是php开发如何避免文件死锁的详细内容。更多信息请关注PHP中文网其他相关文章!

本文比较了酸和基本数据库模型,详细介绍了它们的特征和适当的用例。酸优先确定数据完整性和一致性,适合财务和电子商务应用程序,而基础则侧重于可用性和

本文讨论了确保PHP文件上传的确保,以防止诸如代码注入之类的漏洞。它专注于文件类型验证,安全存储和错误处理以增强应用程序安全性。

本文讨论了在PHP中实施API速率限制的策略,包括诸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之类的库。它还涵盖监视,动态调整速率限制和手

本文讨论了使用password_hash和pyspasswify在PHP中使用密码的好处。主要论点是,这些功能通过自动盐,强大的哈希算法和SECH来增强密码保护

本文讨论了OWASP在PHP和缓解策略中的十大漏洞。关键问题包括注射,验证损坏和XSS,并提供用于监视和保护PHP应用程序的推荐工具。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中