windows下的原子操作函数InterlockedCompareExchange的用法

函数原型如下:(在不同编译器上参数可能写的不一样,不过底层是一样的)

InterlockedCompareExchange (
    __inout LONG volatile *Destination,
    __in    LONG Exchange,
    __in    LONG Comperand
    );

头文件:

可以是#include<window.h>,因为在里面有一个#define InterlockedCompareExchange _InterlockedCompareExchange,别的版本不知道,vs2015是这样的

参数:

Destination:一个指向要设置值的指针

Exchange:要设置的值

Comparand:跟plDestination指向的值进行比较的值。

返回值:

Destination的初始值。

函数作用:

若Destination指向的值跟Comparand相同,则将Destination指向的值设置为Exchange。否则,不执行别的操作。不管你在函数里执行什么操作,返回值始终是Destination

 

代码:

#include "stdafx.h"
#include<iostream>

#include<process.h>
//#include<winnt.h>
#include<windows.h>

using namespace std;
long logon = 1;
long logons = logon;

void test(void*)
{
    logon = 1;
}
int main()
{
    _beginthread(test, 0, NULL);


long l=    InterlockedCompareExchange(&logon, 0, logons);

while (!l)
Sleep(1000);

    return 0;
}

 

l的值始终是最开始的设置的logon的值1。

如果前面的long logon = 1;为long Logon=0;则返回值就是0,无论在InterlockedCompareExchange的logon和logons是否相等

其他的原子操作可以看:Synchronization Functions里的Interlocked Functions

https://www.javaroad.cn/questions/141449说了一个关于这个函数的字节对齐,这个没遇到过,再看

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值