记得以前我要在多线程中判断变量值并修改的时候都是使用临界区锁住一个IF判断语句并赋值。现在发现
通过InterlockedCompareExchange即可完成了。
如:
// 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是不比较直接交换。整个操作过程是锁定内存的,其它处理器不会同时访问内存,从而实现多处理器环境下的线程互斥。