我是 PHP 新手。我知道flock()
当两个用户到达同一个 php 文件向可锁定文件添加内容时,我可以使用它来锁定文件并避免竞争条件。
但是,如果一个 php 进程崩溃了怎么办?下一个等待可锁定文件的用户会发生什么?如果服务器崩溃(有人拔掉插头)会发生什么?锁会自动释放吗?重新启动服务器后文件会保持锁定状态吗?
简而言之,PHP 是否确保正确处理此类危急情况(即未显式释放锁)?如果不是,应该如何处理这些情况?如何从这些中恢复?
我是 PHP 新手。我知道flock()
当两个用户到达同一个 php 文件向可锁定文件添加内容时,我可以使用它来锁定文件并避免竞争条件。
但是,如果一个 php 进程崩溃了怎么办?下一个等待可锁定文件的用户会发生什么?如果服务器崩溃(有人拔掉插头)会发生什么?锁会自动释放吗?重新启动服务器后文件会保持锁定状态吗?
简而言之,PHP 是否确保正确处理此类危急情况(即未显式释放锁)?如果不是,应该如何处理这些情况?如何从这些中恢复?
锁由操作系统处理。所以:
除了使用操作系统提供的锁定文件的机制之外,PHP 不需要做任何特殊的事情,所以总的来说你是非常安全的。
但是,如果您的 Web 服务器设置使得每个请求都没有由新进程处理,那么如果一个请求异常终止(假设一个线程被中止),锁将持续存在并阻止所有进一步的锁请求,很快导致一个死锁的网络服务器。这是您真的,真的不应该使用不提供请求之间进程级隔离的设置的众多原因之一(免责声明:我不是 Web 服务器专家——我在“不应该”部分可能是错误的,甚至虽然我对此表示怀疑)。