针对一个变量,计算机对其的增减操作经过了这三个步骤:
- 将变量的值放到寄存器
- 进行增或减操作
- 将结果值存回变量
这里有线程A和B要对同一个变量同时操作,
A要给这个变量的值+1了!
A加完了,正要执行步骤3进行存储,B带着还没进行更新数值的变量插了进来进行操作,结果最后A操作完的结果被B覆盖导致错误。
但如果把这三个步骤作为一个原子,A操作完了这个原子后B再进行操作就不会有问题了,这就是原子操作。
但至于内部是如何实现的就不清楚了,这里提供一下别人的思路:https://blog.csdn.net/huorongbj/article/details/78215840