您的位置:首页 > 编程语言 > PHP开发

php创建锁机制

2016-04-30 21:43 661 查看
<?php
//有时候,当php发生多线程时,可以自己创建一个类似的锁机制,处理相应的一些逻辑任务。demo如下

##################创建一个锁机制表############################################

$db->query("create table if not exists pog_table(query_status char(30) not null default '',query_time int unsigned not null default 0,operate_type char(20) not null default '')engine MEMORY charset utf8");

##################创建一个锁机制表############################################

$record="lock";

$temp_data=$db->fetch_array($db->query("SELECT * FROM `pog_table` WHERE `operate_type`='$record'"));

if(is_array($temp_data)&&$temp_data['query_status']=='QUERY_NO'){//如果是个数组,并且状态等于QUERY_NO,可以处理

  $query_state=true;

}else if(!is_array($temp_data)){//不是个数组,初始化,包括服务器重启后数据丢失

  $start_time=time();

  $db->query("INSERT INTO `pog_table` (query_status,operate_type,query_time) VALUES ('QUERY_NO','$record',$start_time)");

  $query_state=true;

}

if(is_array($temp_data)&&((time()-$temp_data['query_time'])>60)){//当前时间距离上一次时间超过30,意外情况处理

  $start_time=time();

  $db->query("UPDATE `pog_table` SET `query_status`='QUERY_NO',`query_time`='$start_time' WHERE operate_type='$record' ");

  $query_state=true;

}

if(isset($query_state)&&$query_state==true)//为真,可以处理

{

     //改变锁机制表状态

    $db->query("UPDATE `pog_table` set query_status='QUERY_ING' WHERE `operate_type`='$record'");

    

    //内部可以写相应的逻辑啦

    

    $start_time=time();

    $db->query("UPDATE `pog_table` set query_status='QUERY_NO',query_time=$start_time WHERE `operate_type`='$record'");

    echo "QUERY_OK";

}else{

    echo "QUERY_WAIT";  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  锁机制处理