这是我目前正在维护的一些代码的简化版本:
int SomeFunc()
{
const long lIndex = m_lCurrentIndex;
int nSum = 0;
nSum += m_someArray[lIndex];
nSum += m_someArray[lIndex];
return nSum;
}
lCurrentIndex 由另一个线程定期更新。问题是; 制作 m_CurrentIndex 的本地副本是否会确保对 m_someArray 的两个访问都使用相同的索引?
请注意,这是一个简化的示例;我正在考虑制作本地副本的概念,而不是此处显示的确切代码。我知道编译器会将值放入寄存器中,但这仍然是本地副本,而不是从 lCurrentIndex 读取两次。
谢谢!
编辑:初始分配是安全的,在我们的设置中都保证是 32 位的。Edit2:它们在 32 位边界上正确对齐(忘了那个)