- 论坛徽章:
- 0
|
原帖由 gvim 于 2006-8-11 13:07 发表
这不是复杂不复杂的问题。即便在up上也如此。
如果a ,b 都是系统级的全局变量
a=10;
b=a;
movl a,%eax #1
movl %eax, b #2
1) 进程x 在#1, #2之间发生中断,切换到其他程序y。%eax现在是10,被自动保存。
2) y赋值b=20
3) 切换回x
4) x执行#2句,取出%eax的值10,付给b。
那么,b到底应该是x赋的10还是y赋的20?
问题在于,你能保证#1,#2之间不会发生中断?
对于代码(#3表示任何操作 a 或者 b 的语句):
- a=10;
- b=a;
- movl a,%eax #1
- movl %eax, b #2
- movl x, x #3
复制代码
来说,不管 #1 和 #2 之间可能发生中断还是 #1 和 #2 之间不会发生中断,对于 #3 来说都是一样的,即:
- 不能认为 b 的值就是 10
- 不能认为 a 的值仍然是 10
因为就算 #1 和 #2 构成原子操做,中间不会被打断,也无法保证 #2 和 #3 之间不会发生中断。对于 #3 来说,a 和 b 的值总是可能会被中断程序修改。 |
|