首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

i++是否是原子指令?该怎么处理

2012-06-08 
i++是否是原子指令?有一个题:两个线程同时访问一个变量i,一个执行i++,一个执行i--,各执行100次,假如i初始

i++是否是原子指令?
有一个题:两个线程同时访问一个变量i,一个执行i++,一个执行i--,各执行100次,假如i初始为0,到最后两个线程结束之后,i是否一定是0?
  windows核心编程上说,不会,原因是编译成汇编指令之后成了多条指令,会出现中断,但是我在windows程序设计书上看到说像i++这样操作在32位平台上被编译成一条机器码指令,是否意味着结果总是0?该怎样去理解?

[解决办法]
i++基本不会是一条机器码,++i都不一定是一条。
[解决办法]
inc [ebp-28] ?

???
mov %eax,(%ebx-28)
add %eax,$1
mov (%ebx-28),%eax 

[解决办法]
可能是可能不是
[解决办法]

探讨

inc [ebp-28] ?

???
mov %eax,(%ebx-28)
add %eax,$1
mov (%ebx-28),%eax

[解决办法]
i++ 不是原子操作, 看看这个博文吧。
http://blog.csdn.net/morewindows/article/details/7392749
[解决办法]
我试验过,在HPUX上,基本上不可能是0,结果是一个很离谱的数字。所以不可能是原子的。
[解决办法]
i++和++i都不是原子操作
[解决办法]
甚至只有一条汇编指令的也不见得都是原子操作,因为指令是由微程序实现的,那是更低级别的。

热点排行