在更改标志之间处理系统重新启动/崩溃

时间:2018-08-24 15:32:42

标签: algorithm deadlock flags

我有以下情况

  
      
  1. 更改标志=开始(在数据库中)
  2.   
  3. 进行一些处理
  4.   
  5. 将标志更新回“已完成”(在数据库中)
  6.   

假设系统在步骤2中崩溃。理想情况下,我想将标志设置回Finished。但是由于系统崩溃,它并没有崩溃,并且陷入了该任务的僵局。

解决这种情况需要遵循哪些标准解决方案/方法/算法?

编辑:死锁如何发生? 仅当标志=已完成时才选择任务。标志=开始表示它正在某个事物的中间。因此,当发生崩溃时,任务不会完成,但是下次系统运行时,标志也不会设置为“完成”。因此,该任务将不再被选择。

1 个答案:

答案 0 :(得分:0)

我在这里看不到任何简单的解决方案。

如果任务执行时间可预测,则可以在数据库中存储任务执行开始的时间戳,并在超时时将任务返回到“空”状态(尚未开始)。

或者,您可以将进程ID存储在数据库中并实施主管程序,该主管程序将启动“执行程序”进程并检查其退出代码。如果进程崩溃,那么主管将“重新初始化”所有标有崩溃进程ID的任务。