使用文件锁可以实现进程的互斥,具体实现方法如下:
- 首先定义一个锁文件的路径,例如:
$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);