gpt4 book ai didi

php - flock() 返回 FALSE 的原因是什么?

转载 作者:可可西里 更新时间:2023-10-31 23:28:48 24 4
gpt4 key购买 nike

PHP 手册说,如果锁定成功,则调用 flock 返回 TRUE,否则返回 FALSE。如果文件被其他进程阻塞,那么 flock 应该等到它被解除阻塞(因为我们不使用 LOCK_NB)。 docs中没有timeout可以打断等待,所以显然flock会无限等待直到获得lock。

但有时我在多线程脚本中从 flock() 得到 FALSE。这是什么原因?

最佳答案

我最近遇到了类似的问题并做了一个小的研究。如果您查看 source code of the PHP flock function ,您可以看到实现取决于编译代码的操作系统。

对于 *nix 系统有:

ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);

表示使用了操作系统级别的fcntl函数。

Manual for fcntl说:

F_SETLKW (struct flock *)

As for F_SETLK, but if a conflicting lock is held on the file, then wait for that lock to be released. If a signal is caught while waiting, then the call is interrupted and (after the signal handler has returned) returns immediately (with return value -1 and errno set to EINTR; see signal(7)).

关于php - flock() 返回 FALSE 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084158/

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