原子操作
就是多线程程序中“最小的且不可并行化的”操作。对于在多个线程间共享的一个资源而言,这意味着同一时刻,多个线程中有且仅有一个线程在对这个资源进行操作,即互斥访问。
单CPU的ARM中要保证资源的原子性,同一资源不能两个及以上的线程有写操作;写操作实际过程(汇编级:1.变量从内从读入内核寄存器;2.修改变量;3.变量写回内存)
如果不保证资源的原子性,举例如下
全局 int count = 0;
C语言级,预期执行一次结果count应该是 2:
task1 task2
count++; count++;
汇编级,实际运行结果count可能是1:
task1 task2
LDR R0 count
LDR R0 count
ADD R2 R0 1
ADD R2 R0 1
STR R2 count
STR R2 count
如何避免
资源前后加入互斥