gpt4 book ai didi

php - 为什么在 PHP 中锁定如此困惑?

转载 作者:IT王子 更新时间:2023-10-29 00:18:42 25 4
gpt4 key购买 nike

SO 用户询问 a question有效的答案是“使用锁定机制”。

在研究我的答案时,我发现 PHP 中似乎没有简单的、进程间可靠的锁定机制。 flock()有一个大胖警告:

On some operating systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you may not be able to rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!

this question 中的讨论深入研究了这个问题,但只提出了相当复杂的解决方案:使用 RAM 磁盘或 Memcache。

唯一看起来不错的是 mySQL 的 GET_LOCK().

所以我的问题是:真的是这样吗? PHP 中真的没有简单明了、跨平台的安全锁系统吗?一个是原子的,如果所有者进程死了就会释放锁,并且不需要大量的设置工作?

最佳答案

不同意 Wernight 的回答。是的,网络内容非常相关 - 但限制因素是操作系统的行为方式。

在 PHP 支持的所有操作系统上,文件锁定只有两种选择 - 阻塞或非阻塞。最终,PHP 必须使用操作系统文件锁定机制来避免与访问相同文件的非 PHP 代码发生冲突。如果您使用阻塞锁,那么 PHP 脚本可能会无限期地阻塞,等待锁被释放——这对于 Web 应用程序来说不是一个好的场景。 OTOH 如果你进行了一个非阻塞的锁调用并且它失败了 - 你接下来要做什么 - 你是否只是等待随机的时间并让你所有的 PHP 脚本尝试获取锁?

解决该问题的唯一实用方法是使用超时的排队锁定请求 - 但据我所知,没有操作系统本身提供该功能。我自己编写了这样的代码 - 用于专用的网络服务器,因此允许其他程序访问没有问题,但是我希望可以使用 inotify 扩展到系统范围的强制锁定系统。

关于php - 为什么在 PHP 中锁定如此困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com