丢失更新方案并发

时间:2016-05-20 07:02:03

标签: concurrency scheduled-tasks

Time        T1               T2 

t1          READ(A)     
t2          A = A - 50       
t3                           READ (A)          
t4                           A = A - 100
t5                           WRITE (A)
t6                           READ (B)
t7          WRITE(A)
t8          READ (B)
t9          B = B + 50
t10         WRITE (B)
t11                          B = B + 10
t12                          WRITE (B)

有人可以帮助我理解上面的日程安排并告诉我我的解释是否正确:

1)假设A = 300,第一个T1将读取A并减去50,因此A = 250 2)然后T2(在时间= t3)将读取(A)但它将读取300(来自时间= t1的A未更新值的原始值),因为t1从未说过{在WRITE(A)更正后执行{1}}? 3)然后在T2(时间= A = A - 50t4,所以A是200,T2将该值写入A.然后它将读取B.
4)现在我的问题是A = A - 100 WRITE (A)上它会写出步骤3(200)中的A值或步骤1中A的值是250吗?

1 个答案:

答案 0 :(得分:0)

我赞同你的解释

如果T1在本地修改A,则是,它将在T1内写入250。

但这听起来真的取决于架构。如果A由两个线程共享,那么T1将写入200,因为A将被重新读取,然后以100减少。

为了获得更准确的答案,建议您定义READ()A = A + NWRITE()的确实做法。它似乎涉及内存和文件,但如何猜测你的想法?

可能另一种简单的方法就是实现这一点。

希望有所帮助