使用文件锁可以实现进程的互斥,具体实现方法如下:
- 首先定义一个锁文件的路径,例如:
$lockFile = '/tmp/mylockfile.lock';
- 在需要互斥的代码块前获取锁,如果锁已经被其他进程占用,则等待一段时间后再尝试获取锁,例如:
$waitTime = 0;
$maxWaitTime = 10; // 最大等待时间为10秒
while (file_exists($lockFile)) {
if ($waitTime >= $maxWaitTime) {
throw new Exception('获取锁超时');
}
sleep(1);
$waitTime++;
}
// 创建锁文件
touch($lockFile);
- 在代码块执行完毕后释放锁,例如:
// 删除锁文件
unlink($lockFile);
完整的实现代码如下:
$lockFile = '/tmp/mylockfile.lock';
$waitTime = 0;
$maxWaitTime = 10; // 最大等待时间为10秒
while (file_exists($lockFile)) {
if ($waitTime >= $maxWaitTime) {
throw new Exception('获取锁超时');
}
sleep(1);
$waitTime++;
}
// 创建锁文件
touch($lockFile);
// 代码块开始
// ...
// 代码块结束
// 删除锁文件
unlink($lockFile);
文章介绍了如何利用文件锁来实现PHP进程间的互斥。通过检查并尝试创建锁文件,如果超过最大等待时间仍无法获取锁,则抛出异常。在执行完关键代码后,删除锁文件以释放锁。
122

被折叠的 条评论
为什么被折叠?



