我是PHP的新手.我知道我可以使用flock()来锁定文件并避免竞争条件,当两个用户到达相同的php文件时,将内容添加到可锁定文件中.
但是,如果php进程崩溃会发生什么?等待可锁定文件的下一个用户会发生什么?如果服务器崩溃(某人拔插头)会发生什么?锁是否自动释放?重启服务器后文件是否会保持锁定状态?
为了缩短它,PHP是否确保正确处理这些危急情况(即未明确释放的锁定)?如果没有,应该如何处理这些情况?如何从这些中恢复?
解决方法:
锁由操作系统处理.因此:
>如果进程崩溃,它所持有的所有锁都会被释放(与它持有的任何其他类型的资源一起)
>如果系统崩溃,锁定无意义,因为它们不会“延续”到下一次重启
除了使用操作系统提供的锁定文件机制之外,PHP不需要做任何特殊操作,所以通常你是完全安全的.
但是,如果您的Web服务器设置使得每个请求都不由新进程处理,那么如果一个请求异常终止(假设线程被中止),则锁将持续存在并阻止所有进一步的锁请求,从而快速导致一个死锁的Web服务器.这是你真的,真的不应该使用不在请求之间提供进程级别隔离的设置的众多原因之一(免责声明:我不是网络服务器专家 – 我在“不应该”部分可能是错的,甚至虽然我对此表示怀疑).
标签:php,crash,release,file-locking
来源: https://codeday.me/bug/20190521/1146742.html