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 - 50
)t4
,所以A是200,T2将该值写入A.然后它将读取B.
4)现在我的问题是A = A - 100
WRITE (A)
上它会写出步骤3(200)中的A值或步骤1中A的值是250吗?
答案 0 :(得分:0)
如果T1在本地修改A,则是,它将在T1内写入250。
但这听起来真的取决于架构。如果A由两个线程共享,那么T1将写入200,因为A将被重新读取,然后以100减少。
为了获得更准确的答案,建议您定义READ()
,A = A + N
和WRITE()
的确实做法。它似乎涉及内存和文件,但如何猜测你的想法?
可能另一种简单的方法就是实现这一点。
希望有所帮助