丢失更新场景并发
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 中(时间 = t4
)A = 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 + N
和 WRITE()
的真正作用。好像涉及到内存和文件,但是怎么猜到你心里想的是什么?
可能另一种简单的了解方法是实现它。
希望对您有所帮助
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 中(时间 = t4
)A = 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 + N
和 WRITE()
的真正作用。好像涉及到内存和文件,但是怎么猜到你心里想的是什么?
可能另一种简单的了解方法是实现它。
希望对您有所帮助