答:主要是由于并发的时候,多个php程序去操作了同一个资源,这个时候造成资源的抢夺,数据不一致。为了解决这个问题,可以使用php里面的文件锁来实现。在多个php程序操作某一个资源的时候,需要先去获取这个锁资源,只有获取到锁的程序才有权限去操作资源。当操作完成后,释放锁资源,使得别的程序能再次去抢夺锁资源
1.创建一把锁,一个文本文件,随意命名,lock.txt
$key = fopen('lock.txt','r');
do{
$lockstatus = flock($key,lock_ex);//获得锁
//为防止php占cpu不放
usleep(50000);//0.05s
}while(!$lockstatus);
//抢到锁的程序可以操作资源
if($lockstatus){
//为防止高并发,所有程序写在这里即可
//减一操作,多个程序去操作减一
$sql = select * from kucun where goo_id =1;
$res = mysql_query($sql);
$data = mysql_fetch_assoc($res);
$data['kucun']--;
$sql = update kucun set kucun = . $data['kucun'] . where good_id = 1;
mysql_query($sql);
echo 库存正在减少;
flock($lockstatus,lock_un);//释放锁
}else{
echo 系统繁忙!;
}
fclose($key);//关闭指向的文件
