Concurrency 丢失更新场景并发性
有人能帮我理解上面的时间表,并告诉我我的解释是否正确: 1) 假设A=300,第一个T1将读取A并减去50,因此A=250。Concurrency 丢失更新场景并发性,concurrency,scheduled-tasks,Concurrency,Scheduled Tasks,有人能帮我理解上面的时间表,并告诉我我的解释是否正确: 1) 假设A=300,第一个T1将读取A并减去50,因此A=250。 2) 然后T2(时间=t3)将读取(A),但它将读取300(时间=t1)的未更新值的原始值,因为t1在A=A-50正确后执行时从未说过写入(A) 3) 然后在T2中(时间=t4)A=A-100因此A为200,T2将该值写入A。然后它将读取B. 4) 现在我的问题是,当在t7上写入(A)时,它会写入步骤3(200)中A的值还是步骤1中A的值,即250?我同意您的解释 如果T
2) 然后T2(时间=
t3
)将读取(A),但它将读取300(时间=t1
)的未更新值的原始值,因为t1
在A=A-50
正确后执行时从未说过写入(A)
3) 然后在T2中(时间=t4
)A=A-100
因此A为200,T2将该值写入A。然后它将读取B.4) 现在我的问题是,当
在t7上写入(A)
时,它会写入步骤3(200)中A的值还是步骤1中A的值,即250?我同意您的解释
如果T1在本地修改A,那么是的,它将从T1中写入250
但这听起来确实依赖于架构。如果A由两个线程共享,那么T1将写入200,因为A将被重新读取,然后减少为100
为了得到更准确的答案,我建议您定义READ()
、a=a+N
和WRITE()
的真正作用。这似乎涉及到内存和文件,但如何猜测您的想法
也许另一个简单的方法是实现这一点
希望对你有所帮助我同意你的解释
如果T1在本地修改A,那么是的,它将从T1中写入250
但这听起来确实依赖于架构。如果A由两个线程共享,那么T1将写入200,因为A将被重新读取,然后减少为100
为了得到更准确的答案,我建议您定义READ()
、a=a+N
和WRITE()
的真正作用。这似乎涉及到内存和文件,但如何猜测您的想法
也许另一个简单的方法是实现这一点
希望能有所帮助为什么要用sql标记它?在我看来,这一点都不像SQL。我以为这与SQL有关,但好吧,我将删除标记。为什么要用SQL标记它?在我看来,这一点都不像SQL。我以为这与SQL有关,但好的,我将删除标记。
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)