错误地使用InterlockedCompareExchange以primefaces方式复制值?

我不能在这里使用C ++ 11primefaces

我对使用InterlockedCompareExchange()以“primefaces地”读取变量有疑问。

我在这里问了一个问题,但我在那里做的是不同的。 “交换”和“竞争者”参数(第2和第3)是“硬编码”值,即不从变量读取。

请考虑一下:

  // Copy the connect time DWORD dwConnectTime = InterlockedCompareExchange(&msgInfo.m_dwConnectTime, msgInfo.m_dwConnectTime, msgInfo.m_dwConnectTime); 

这旨在将msgInfo.m_dwConnectTime的值与msgInfo.m_dwConnectTime的当前值msgInfo.m_dwConnectTime ,前提是msgInfo.m_dwConnectTime的当前值为msgInfo.m_dwConnectTime 。 然后返回msgInfo.m_dwConnectTime的先前值, 这是我依赖于“复制”该值的内容

虽然第二个和第三个参数本身的msgInfo.m_dwConnectTime读取不保证是primefaces的,但我刚才明白了。 因此,此代码是否不正确因此我需要使用锁定原语来复制msgInfo.m_dwConnectTime

根据评论和您之前问题的链接,这个问题的动机是您希望避免撕裂。 读取和写入对齐数据是primefaces的。 您试图防止撕裂,但在数据对齐时无法撕裂。 并且可以合理地假设您的数据是对齐的,因为这是InterlockedCompareExchange和所有InterlockedXXX函数的要求。

因此,你提出的问题是一个不合理的问题。 它基于错误的前提,即对齐数据可能会发生撕裂。

因此,您不需要调用InterlockedCompareExchange或任何其他InterlockedXXX函数以避免撕裂,因为只有在数据未对齐时才可能发生撕裂。