我有以下情况
- 更改标志=开始(在数据库中)
- 进行一些处理
- 将标志更新回“已完成”(在数据库中)
假设系统在步骤2中崩溃。理想情况下,我想将标志设置回Finished。但是由于系统崩溃,它并没有崩溃,并且陷入了该任务的僵局。
解决这种情况需要遵循哪些标准解决方案/方法/算法?
编辑:死锁如何发生? 仅当标志=已完成时才选择任务。标志=开始表示它正在某个事物的中间。因此,当发生崩溃时,任务不会完成,但是下次系统运行时,标志也不会设置为“完成”。因此,该任务将不再被选择。
答案 0 :(得分:0)
我在这里看不到任何简单的解决方案。
如果任务执行时间可预测,则可以在数据库中存储任务执行开始的时间戳,并在超时时将任务返回到“空”状态(尚未开始)。
或者,您可以将进程ID存储在数据库中并实施主管程序,该主管程序将启动“执行程序”进程并检查其退出代码。如果进程崩溃,那么主管将“重新初始化”所有标有崩溃进程ID的任务。