总所知周,并发容易造成数据的重复处理,我的一个项目给游戏客户端提供了接口,游戏用户相对较多,如果使用数据库排它锁消耗的资源较高,
因而使用了文件的排它锁来应对并发。
思路是打开一个文件并取得文件的独占锁,采用的是非阻塞,当程序运行完毕再释放独占锁资源。
/** ????* 加锁,独占锁 ????*/ ???public function lockFile() ???{ ???????$this->handle=fopen(‘lock‘,‘w+‘); ???????if($this->handle){ ???????????//如果文件被锁定则非阻塞操作 ???????????if(flock($this->handle,LOCK_EX | LOCK_NB)){ ???????????????return true; ???????????}else{ ???????????????\Log::INFO(‘并发啦‘); ???????????????$this->ajaxMessage(1,‘服务器繁忙,稍后再试‘); ???????????} ???????} ???????return false; ???}
/** ????*解锁 ????*/ ???public function unlockFile() ???{ ???????if($this->handle){
//释放锁定 ???????????flock($this->handle,LOCK_UN); ???????????clearstatcache(); ???????????fclose($this->handle); ???????} ???}
PHP使用文件排它锁,应对小型并发
原文地址:https://www.cnblogs.com/IT--Loding/p/6795777.html