在中断程序内 变量的加加,这种情况是否会出现BUG!

2019-12-27 19:02发布

先说明一下   a=a+1这条程序语句的执行步骤:
javascript:;

我在想这种情况:
如果执行到第一步,将a的值读到寄存器R中

执行完这一条后,来了个中断就是 a=a-1 !
等执行完 a=a-1 ,这时候重点来了!

我的CPU会回到 a=a+1 的第二步!
R寄存器里面是不知道 a 已经被改变了,所以他还是按照原先的值 加1!
然后在写回到 a !
  
这时候就会出现bug了!
这种情况大伙们有考虑过吗?  要怎么避免?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
85条回答
redroof
2020-01-05 09:22
helislayer 发表于 2016-12-8 01:31
兄台这个大多数是正确的,但是这个话不可以说
这么满。


简单的无锁队列只有一个读一个写。我认为这是不需要说的。用的人都知道。还有,计数器不能超过你cpu位数。不然无法原子读写。
中断里写没检查是否满,但问题不大,应该靠设计保证,因为中断又不能阻塞自己。队列满了你只能丢数据了。

一周热门 更多>