Appearance
互斥锁
简单来说,如果某个方法在并发下需要串行执行(一般是写操作),则需要使用互斥锁。
使用场景
- 客户端调用API,该API方法需要执行一段时间,为了避免用户重复点击造成数据错误(可同时配合客户端防抖与节流)
- 定时任务执行时间超过定时执行间隔,避免并发执行
- 其它并发情况
使用方法
可以使用Yii::$app->mutex->acquire($name,$timeout = 0)方法来获取互斥锁,无需担心死锁的问题。
$name 互斥锁名称
$timeout 在没有获得锁之前需要等待的时间(秒)
php
$name = 'lock_name';
if(Yii::$app->mutex->acquire($name,3)){
//具体代码逻辑
}else{
//获取互斥锁失败逻辑
echo '你操作的太快啦,慢一点~';
}