陈炼人生
人生成长日记

一个PHP代码并发锁,使用PHP实现并发锁控制


class SyncLock
{

    /**
     * 自动加锁执行
     * @param lock string 锁key       * @param callable|arrayfunc
     * @param array params       * @param intwaitTime 等待时间,微秒,默认相当于是100毫秒
     * @param int maxExecuteTime 最大执行时间 秒       * @return mixed       * @throws Exception       */      public static function lockWait(lock, func = [],params = [], waitTime = 100000,maxExecuteTime = 120)
    {
        for (i = 0;i < 10; i++) {              if (Redis::setnx(lock, 1, maxExecuteTime)) {                  try {                      return call_user_func_array(func, params);                  } catch (\Exceptione) {
                    throw e;                  } finally {                      Redis::delKey(lock);
                }
            }
            //等待时间随着循环次数增加
            realWaitTime =waitTime * i ?waitTime * i :waitTime;
            //等待,微秒
            usleep($realWaitTime);
        }
        throw new \Exception('并发处理异常');
    }
}

 

赞(0) 打赏

人生重要课题之一就是自立自强:独立思考,经济独立,人格独立

人生探秘文章投稿

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏