相当于对以下代码做了同步,判断之后再修改,可以用于引用计数:
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是不比较直接交换。整个操作过程是锁定内存的,其它处理器不会同时访问内存,从而实现多处理器环境下的线程互斥。