php创建锁机制

<?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";  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写代码的马良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值