woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

InterlockedCompareExchange 判断当前值

相当于对以下代码做了同步,判断之后再修改,可以用于引用计数:

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是不比较直接交换。整个操作过程是锁定内存的,其它处理器不会同时访问内存,从而实现多处理器环境下的线程互斥。

posted on 2009-10-27 17:27 肥仔 阅读(3274) 评论(2)  编辑 收藏 引用 所属分类: Windows开发

评论

# re: InterlockedCompareExchange 判断当前值  回复  更多评论   

你这样写代码,是会判断错误的
2013-07-26 12:53 | Flhawker

# re: InterlockedCompareExchange 判断当前值  回复  更多评论   

bool IsEqual(int nComperand)
{

if ( !InterlockedCompareExchange(&g_InsertQualify, 0, nComperand) )
return true;
else
return false;
}
2014-04-01 13:40 | xxb

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理