相當于對以下代碼做了同步,判斷之后再修改,可以用于引用計數:
if(a == b)
a = c;
通過InterlockedCompareExchange可判斷多線程共享的int型數據是否等于預定值,并對其進行賦值。
如:
// g_InsertQualify 與 nComperand 進行比較, 若相等,則 g_InsertQualify = 0;
bool IsEqual(int nComperand)
{
int lOldSize = g_InsertQualify;
if (lOldSize == InterlockedCompareExchange(&g_InsertQualify, 0, nComperand))
return true;
else
return false;
}
InterlockedCompareExchange是把目標操作數(第1參數所指向的內存中的數)與一個值(第3參數)比較,如果相等,則用另一個值(第2參數)與目標操作數(第1參數所指向的內存中的數)交換;InterlockedExchange是不比較直接交換。整個操作過程是鎖定內存的,其它處理器不會同時訪問內存,從而實現多處理器環境下的線程互斥。