丢失更新场景并发

Lost Update Scenario Concurrency

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(A 的原始值未从时间 = t1 更新值)因为 t1 从未说过 WRITE(A) 在执行后 A = A - 50 正确吗?
3) 然后在 T2 中(时间 = t4A = A - 100 所以 A 是 200 并且 T2 将该值写入 A。然后它将读取 B.
4) 现在我的问题是 WRITE (A)t7 时,它会写入第 3 步中的 A 值 (200) 还是第 1 步中的 A 值 250?

我分享你的解读

如果T1在本地修改A,那么是的,它会从T1内部写入250。

但这听起来确实取决于体系结构。如果 A 被两个线程共享,那么 T1 将写入 200,因为 A 将被重新读取,然后减少 100。

为了得到更准确的答案,我建议您定义 READ()A = A + NWRITE() 的真正作用。好像涉及到内存和文件,但是怎么猜到你心里想的是什么?

可能另一种简单的了解方法是实现它。

希望对您有所帮助