因为我安装了cron,每分钟运行相同的脚本。同时,脚本会执行多次。
有这样一部分:
$query = mysql_query("select distinct `task_id` from tasks_pending where `checked`='0' and `taken`='0' limit 50");
然后,将获得的值设置为"take = 1"
由于同时执行多个进程,因此请求为不同的进程返回相同的数据。是否有可能以某种方式禁用她的这部分时间以只能执行一个进程?
对不起,英语不好。
使用 SELECT FOR UPDATE 和 在更新之前阻止另一个进程选择相同的行
您可能希望在对表执行任何操作之前锁定该表,然后在之后使用 [UN]LOCK TABLES
语句将其解锁。
否则,可以在事务范围内使用 SELECT FOR UPDATE
查询。