不止单片机,所有类似的计算机里都有这个概念。
这涉及到编译原理和多线程等相关的知识。
我们知道无论什么语言最终都是要编译成二进制去执行的。
以C语言为例,简单的 a=ab;这样的语句编译之后其实是会变成几个二进制指令的,那么这就会造成一个问题,这个指令执行到一半的时候有可能被中断,大部分时候没什么影响,但是你如果中断处理程序或者另外的线程中 *** 作了a或者b这个变量,结果很有可能会完全与你本意不一样,因为这个变量在外部被改变了。
原子 *** 作指的就是不会被中断的 *** 作。
在多线程之中一般会用锁做线程间的同步,避免多个线程同时 *** 作同一段数据
13是, 24不是, 但并不是楼上说的意思哦, 原子 *** 作可以和多线程结合起来看。
首先楼主你要知道原子 *** 作是什么,我的理解是符合多线程原子性 *** 作的 *** 作就叫原子 *** 作。
原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型)这个 *** 作
是不可分割的,那么我们说这个 *** 作是原子 *** 作。再比如:a++;这个 *** 作实际是a = a + 1;
是可分割的,所以他不是一个原子 *** 作。
例如 :你执行a = 1这个 *** 作的时候, 是没有任何问题的, 但是当你执行a = b 的时候就有很大的问题了
假如这个时候别的线程改变了b的值, 那么a = b就会出现不同的结果, 因为b的值你并不能确定,
比如你第期望的是a = b,你认为b的值是3,所以a也是3,可是多线程情况下程序使b变成了
4,那么a也就变成了4,那这就不算一个原子 *** 作。
可以用正点原子的程序做产品的。RT1052芯片具有较为严格的上电时序,因此相对于其他MCU很容易遇到这类问题因此建议初次使用者可以正点原子核心板电源上电原理图,以此来保证不会在这里出现问题。
以上就是关于单片机中的原子 *** 作是指什么全部的内容,包括:单片机中的原子 *** 作是指什么、请问java中的原子 *** 作有哪些、可以用正点原子的程序做产品吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)