在ARM多核架构中,数据内存屏障(DMB)指令不会阻塞其他核心。该指令只是将数据写回内存,并保证相关内存访问的顺序,以避免乱序执行的结果。下面是一个使用DMB指令的示例代码:
void atomic_increment(int *p) { int old_value, new_value;
do {
old_value = *p;
new_value = old_value + 1;
__DMB(); //插入DMB指令
} while (__LDREXW(p) != old_value ||
__STREXW(new_value, p));
}
在上面的代码中,我们定义了一个原子的整型递增函数。使用do-while循环来不断尝试增加整型变量的值,直到成功为止。在读取旧值和写入新值之间,我们插入了一个DMB指令,以保证顺序。