gpt4 book ai didi

php - 有没有一种可移植的方法可以在 flock() 上设置超时?

转载 作者:IT王子 更新时间:2023-10-29 00:06:12 26 4
gpt4 key购买 nike

flock()是 PHP 的可移植 咨询文件锁定功能。他们明确宣传它甚至可以在 Windows 下运行:

flock() allows you to perform a simple reader/writer model which can be used on virtually every platform (including most Unix derivatives and even Windows).

我想在阻塞的 flock() 上也设置一个可移植 超时(并且不用忙着等待 LOCK_NB选项)。在 UNIX 中,这可以简单地通过设置一个发送 SIGALRM 的警报来实现:

pcntl_signal(SIGALRM, function() {});
pcntl_alarm(3);
try {
if (!flock($handle, LOCK_EX)) {
throw new \Exception("Timeout");
}
} finally {
pcntl_alarm(0);
pcntl_signal_dispatch();
pcntl_signal(SIGALRM, SIG_DFL);
}

是否有一种可移植的方法来为阻塞的 flock() 设置超时?如果是,怎么办?

最佳答案

我不认为没有繁忙的等待/轮询循环就可以在 Windows 上执行此操作。

PHP 实现 flock在 Windows 上使用 LockFileEx (参见 flock_compat.c:132)。从这些类似的问题中可以看出,无法在 LockFileEx 上设置超时或取消等待 LockFileEx 请求的进程(即没有等同于此用例的 SIGALRM 信号):

  1. LockFile with timeout? (2011 年问)

Q) If I want to wait for file-lock with timeout, how would I go about it?

...

A) write a small loop to check the return code

  1. "LockFileEx can't time out it just hangs"来自 microsoft.public.win32.programmer.kernel 邮件列表,1997

Q) Does anyone know of a way to get LockFileEx to time out ?

...

A) you can only have it fail imemdiately, sleep, and loop back until you reach some retry limit.

关于php - 有没有一种可移植的方法可以在 flock() 上设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710549/

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