如何判断++int是否为原子操作?
测试代码如下:
















































以上代码分别在X86(GCC编译器)和XScale处理器上测试,多次测试的结果是:
X86上输出OK,而XScale输出FAIL。
分析如下:X86是CISC(复杂指令集)处理器,有直接操作内存的指令,示例中++counts;被编译成incl counts。XScale是RISC(精简指令集)处理器,RISC是基于Load/Store的指令集,没有直接操作内存的指令,示例中++counts;被编译为,
ldrr2, .L5
ldrr3, .L5
ldrr3, [r3, #0]
addr3, r3, #1
strr3, [r2, #0]
因此++int在像X86这样的CISC处理器中可以是原子操作,而在RISC处理器中不可能是原子操作。
同时,也和编译器有关,以上结果是在未优化的情况下。
一般来说,++int操作不可看作为原子操作。
本文地址:http://www.45fan.com/a/question/72467.html