gpt4 book ai didi

php - PHP如何处理同一个独占锁的两个进程?

转载 作者:行者123 更新时间:2023-12-05 06:45:36 26 4
gpt4 key购买 nike

貌似当php使用flock()获取一个文件的排他锁,然后使用pcntl_fork拆分成两个进程时,两个进程都拥有相同的排他锁——也就是说,进一步调用flock($ fd, LOCK_EX) 在该文件句柄上返回 true。

但是,使用 flock 的目的是防止两个进程同时写入同一个文件。那么 PHP 是如何处理这种情况的呢?它是否允许以某种方式都具有排他锁的两个进程发生冲突?有没有办法(不创建新的文件处理程序)让一个进程检测另一个进程是否释放了锁?

这主要是学术好奇心。我知道这可以通过制作一个新的文件处理程序来处理,或者作为使用 IPC 通知其他进程的最后手段,但我想知道 flock 系统是否有任何内置的方法来检测锁的重复?

最佳答案

flock 在文件句柄级别上操作(在 PHP 术语中,在 fopen 级别返回的文件句柄资源上),因此当您 fork both 进程将拥有锁,因为每个进程都有相同资源的副本。

flock 的要点是防止同时访问,只要您不与其他进程共享文件句柄,它就会这样做。由于共享是一种自愿操作,这不是一个实际问题;如果您确实共享,则需要做出额外的安排,以保持锁定排他性。

在学术层面上,虽然内核有可能在您 fork 后检测锁重复(毕竟,它知道您有一个打开的文件描述符与一个锁条目相关联) , 实现使得无法对此采取任何措施。

关于php - PHP如何处理同一个独占锁的两个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907691/

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