我有一个执行一些长任务的 lib 类(“更新程序”),这个任务可以手动启动(在浏览器中)或每 2 小时启动一次(我已经实现了 gem,每 2 小时执行一次这个任务的计划)。
看到这些任务在数据库上做了很多工作,我认为可能会发生一些并发错误(例如,如果调用 when 尚未工作)。我说对了吗?
我想到了一个使用互斥锁的解决方案,我的 Updater 类有一个伪代码,如下所示:
module Updater
def start
#do some job
end
end
我认为一个正确的解决方案是这样的
module Updater
def start
mutex.lock
#do some job
mutex.unlock
end
end
我的解决方案正确吗?
请提供更多关于并发的信息(例如如何在 Rails 中正确使用互斥锁,我必须要求什么等)?我已经搜索过,但没有找到任何很好的解释。