相當于對以下代碼做了同步,判斷之后再修改,可以用于引用計數(shù):
if(a == b)
a = c;
通過InterlockedCompareExchange可判斷多線程共享的int型數(shù)據(jù)是否等于預(yù)定值,并對其進行賦值。
如:
// 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是把目標操作數(shù)(第1參數(shù)所指向的內(nèi)存中的數(shù))與一個值(第3參數(shù))比較,如果相等,則用另一個值(第2參數(shù))與目標操作數(shù)(第1參數(shù)所指向的內(nèi)存中的數(shù))交換;InterlockedExchange是不比較直接交換。整個操作過程是鎖定內(nèi)存的,其它處理器不會同時訪問內(nèi)存,從而實現(xiàn)多處理器環(huán)境下的線程互斥。