InterlockedAdd 用來解決對一個變量做加法時多線程同步問題。 比如:
void AddSize(LONG lAdd)
{
????? InterlockedAdd (&g_lSize, lAdd);
}
但是 InterlockedAdd 函數只有Intel 的Itanium CPU支持, 所以無法被通常的程序使用。 解決方案是改用 InterlockedCompareExchange ,該函數適用于任何CPU 。
代碼如下:
void AddSize(LONG lAdd)
{
????? while(1)
????? {
????????? LONG lOldSize = g_lSize;
????????? if (lOldSize? == InterlockedCompareExchange(&g_lSize, lOldSize + lAdd, lOldSize))
????????? {
?????????????? break;
????????? }
?????? }
}
當然,可以用其他線程同步的方式(比如Critical Section )也可以,但是代碼執行效率會低很多。
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/WinGeek/archive/2009/05/29/4223338.aspxInterlockedCompareExchange 用法