<?php defined('CORE_DIR') || exit('入口错误'); ?>
<?php
class secache_no_flock extends secache{

    function secache_no_flock(){
        parent::secache();
        $this->__support_usleep = version_compare(PHP_VERSION,5,'>=')?20:1;
    }

    function lock($is_block,$whatever=false){

        ignore_user_abort(1);
        $lockfile = $this->_file . '.lck';

        if (file_exists($lockfile)) {
            if (time() - filemtime($lockfile) > 5){
                touch($lockfile);
                return true;
            }elseif(!$is_block){
                return false;
            }
        }

        $lock_ex = @fopen($lockfile, 'x');
        for ($i=0; ($lock_ex === false) && ($whatever || $i < 20); $i++) {
           clearstatcache();
           if($this->__support_usleep==1){
               usleep(rand(9, 999));
           }else{
               sleep(1);
           }
           $lock_ex = @fopen($lockfile, 'x');
        }

        return ($lock_ex !== false);
    }

    function unlock(){
        ignore_user_abort(0);
        return unlink($this->_file.'.lck');
    }
}
