- 论坛徽章:
- 0
|
>> 我到第一次听说原子性还可以从过程和结果两种方式去理解。
这是因为对于语言层面上的一个语句来说,如果没有同步保证的话来讨论它的原子性不是很明智。大部分赋值语句可以对应着一系列的指令,这时显然这个赋值操作过程不是原子的,但是就赋值的结果来说(左操作数有没有出现中间值),可能是原子的,也可能不是。
>> 如你说所,过程不是原子的已经达成共识。
严格来说不是这样的,因为如 x = 123; 这样进行的立即数赋值可能只需要诸如 movl $123, -4(%ebp) 一条指令,所以无论是赋值过程还是结果都是原子性的。
>> 那么我第二次问你“赋值结果”是什么意思?
>> 你的意思是否是 重点在最后的往左操作数b写入的 movl %eax, b 一句是原子的,那么整个 b=i 的赋值操作就是原子的?
单条指令,如 movl %eax, b 的执行不可被中断,所以其操作,无论结果还是过程,都是原子的。
问题在于(前面也已经提到过),一个赋值语句的向左操作数写入的过程可能不是由一条传送指令、而是由两条或者以上的传送指令组成(比如对于 long long int 变量一般需要要两条传送指令完成赋值。虽然不常见,但是有的系统即使对于 int 变量也是这样)。如果是这种情况,显然赋值不是原子操作。 |
|