请问:C整形变量赋数值、++、--等是不是原子操作?

2019-12-27 18:58发布

就是如同下面的例子:

int i;

i = 123;
i++;
i--;

诸如此类......
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
36条回答
wye11083
1楼-- · 2019-12-28 10:45
snoopyzz 发表于 2017-5-22 20:45
stm8系列里用cosmic编译器, 8位和16位变量都是原子操作++ --,不会因为中断而得到中间值 ...

这操作是单指令周期的。。。不涉及分拆
snoopyzz
2楼-- · 2019-12-28 11:30
wye11083 发表于 2017-5-22 20:47
这操作是单指令周期的。。。不涉及分拆

对呀, 所以别说一定不是...要分具体芯片, 变量情况 , 编译器
dr2001
3楼-- · 2019-12-28 13:23
 精彩回答 2  元偷偷看……
落叶知秋
4楼-- · 2019-12-28 18:36
楼上说的对,我被坑的是ARM的32位处理器的编译器
takashiki
5楼-- · 2019-12-28 23:53
落叶知秋 发表于 2017-5-22 20:57
楼上说的对,我被坑的是ARM的32位处理器的编译器

哈哈,什么叫高级精简指令集?就是比一般精简指令集还要高级,看起来理所当然的东西到这里并不完全适用,可能会给拆得七零八落。
一个简单的自增,可能都需要先LDR地址,然后LDR或MOV数据,然后++,然后STR数据。要是没有专门的访问指令访问非32位的变量,还有额外的逻辑操作。要是硬件不支持非对齐访问,软件访问非对齐数据时额外加的东西就更多了,反汇编出来一大片。
prince2010
6楼-- · 2019-12-29 03:27
落叶知秋 发表于 2017-5-22 20:57
楼上说的对,我被坑的是ARM的32位处理器的编译器

我用的是cortex  M3 内核,请问有什么办法?

比如在主程序和中断中都要操作某个全局变量。

一周热门 更多>