Skip to content

互斥锁

简单来说,如果某个方法在并发下需要串行执行(一般是写操作),则需要使用互斥锁。

使用场景

  • 客户端调用API,该API方法需要执行一段时间,为了避免用户重复点击造成数据错误(可同时配合客户端防抖与节流)
  • 定时任务执行时间超过定时执行间隔,避免并发执行
  • 其它并发情况

使用方法

可以使用Yii::$app->mutex->acquire($name,$timeout = 0)方法来获取互斥锁,无需担心死锁的问题。

$name 互斥锁名称

$timeout 在没有获得锁之前需要等待的时间(秒)

php
$name = 'lock_name';

if(Yii::$app->mutex->acquire($name,3)){
    //具体代码逻辑
}else{
    //获取互斥锁失败逻辑
    echo '你操作的太快啦,慢一点~';
}

广州大舟信息科技 版权所有