在多线程或 RTOS 环境中,以下这些代码是否相同?
我相信他们不是。但是第一个代码绝对保存在多线程环境中吗?编译器是否有规则为“ga”分配一个寄存器,并且稍后在 func_a() 中不会再次读取“ga”?
我知道我可以使用锁,但这不是关于如何保护数据的问题。这只是关于编译器行为的问题。
// ga 是一个全局变量。
int func_a() {
int a = ga;
return a>2 ? a-2 : 2-a;
}
int func_b() {
return ga>2 ? ga-2 : 2-ga;
}
我的意图是寻找一种标准方式(不是特定于平台的)来读取 ga 一次并将其值分配给局部变量“a”。
然后可以始终使用“a”,而不管“ga”是否已更改。