a616652325 发表于 2018-12-16 12:14:26

php里面的文件锁

  通过使用ab做并发执行的时候,发现库存减少不一致,为什么呢?
  答:主要是由于并发的时候,多个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);//关闭指向的文件
  




页: [1]
查看完整版本: php里面的文件锁