我想简短的回答是 NO,根据我的“研究”,我发现 PHP 中目前没有一个名为 POSIX 的信号量实现。
Bob Fanger 发布了一个有趣的解决方法,将字符串转换为 SysV 信号量键,缺点是您必须在需要信号量的每个代码中实现相同的算法。
不过,我最终做的是在锁定文件上使用flock()。
PHP
# open an exclusive lock
$lock = fopen('/path/to/file.lock', 'w');
flock($lock, LOCK_EX);
# edit a file
$f = fopen ('/path/to/file.txt', 'a');
fwrite($f, "append through PHP\n");
fclose($f);
# unlock
flock($lock, LOCK_UN);
fclose($lock);
PERL
use Fcntl qw(:flock);
# open an exclusive lock
open LOCK, '>/path/to/file.lock';
flock LOCK, LOCK_EX;
# edit a file
open FILE, '>>/path/to/file.txt';
print FILE "append through PERL\n";
close FILE;
# unlock
flock LOCK, LOCK_UN;
close LOCK;
我知道额外的锁定文件可能看起来有点矫枉过正,但您只能在写入模式下使用LOCK_EX,有时我只需要读取文件。
注意:flock() 用作建议文件锁定机制,如果任何其他程序尝试修改文件而不调用 flock(),它将成功。