Concurrency 丢失更新场景并发性

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

有人能帮我理解上面的时间表,并告诉我我的解释是否正确:

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?

我同意您的解释 如果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)