原子访问

通过Interlocked系列函数是 Windows API 提供的一组原子操作函数,用于在多线程环境中安全地操作共享变量。当我们执行这些Interlocked系列函数的时候 ,函数会对总线发出一个硬件信号,这个硬件信号可以防止CPU同一时刻访问同一个内存地址,从而大打到原子访问的目的。以下是一些常用的 Interlocked 系列函数:

1.    InterlockedIncrement:递增指定的变量。
2.    InterlockedDecrement:递减指定的变量。
3.    InterlockedExchange:将指定的变量设置为指定的值,并返回该变量的原值。
4.    InterlockedExchangeAdd:将指定的值加到指定的变量上,并返回该变量的原值。
5.    InterlockedCompareExchange:如果指定的变量的当前值等于指定的比较值,则将该变量设置为指定的值。
6.    InterlockedAnd:对指定的变量执行按位与操作。
7.    InterlockedOr:对指定的变量执行按位或操作。
8.    InterlockedXor:对指定的变量执行按位异或操作。

LONG InterlockedIncrement(
_Inout_ LONG volatile *Addend
); LONG InterlockedDecrement(
_Inout_ LONG volatile *Addend
); LONG InterlockedExchange(
_Inout_ LONG volatile *Target,
_In_ LONG Value
); LONG InterlockedExchangeAdd(
_Inout_ LONG volatile *Addend,
_In_ LONG Value
); LONG InterlockedCompareExchange(
_Inout_ LONG volatile *Destination,
_In_ LONG Exchange,
_In_ LONG Comperand
); LONG InterlockedAnd(
_Inout_ LONG volatile *Destination,
_In_ LONG Value
); LONG InterlockedOr(
_Inout_ LONG volatile *Destination,
_In_ LONG Value
); LONG InterlockedXor(
_Inout_ LONG volatile *Destination,
_In_ LONG Value
);

下面是一个简单的示例代码:

#include <iostream>
#include <Windows.h>
#include <process.h> int main()
{
long value = 0;
InterlockedIncrement(&value);//变量值加1
std::cout << "Value: " << value << std::endl;//输出1 InterlockedDecrement(&value);//变量值减1
std::cout << "Value: " << value << std::endl;//输出0 InterlockedExchange(&value, 10);//将变量值设置为10
std::cout << "Value: " << value << std::endl;//输出10 InterlockedExchangeAdd(&value, 5);//将变量值加5
std::cout << "Value: " << value << std::endl;//输出15 InterlockedCompareExchange(&value, 20, 15);//如果变量值等于15,则将变量值设置为20
std::cout << "Value: " << value << std::endl;//输出20
return 0;
}

用于线程同步的Interlocked系列函数主要有哪些的更多相关文章

  1. 原子操作 Interlocked系列函数

    上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...

  2. (转)原子操作 Interlocked系列函数

    上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...

  3. 多线程面试题系列(3):原子操作 Interlocked系列函数

    上一篇中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错.这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将 ...

  4. 多线程--原子操作 Interlocked系列函数

    [转]原文地址:http://blog.csdn.net/morewindows/article/details/7429155 线程同步与互斥: 互斥主要指多个线程不能同时访问一个资源,如打印机就是 ...

  5. 读书笔记——Windows核心编程(8)Interlocked系列函数

    先让我们来复习下小学知识 A+B=C//式中A为被加数,B为加数. A-B=C//式中A为被减数,B为减数. 再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功. -- ...

  6. 多线程笔记--原子操作Interlocked系列函数

    前面写了一个多线程报数的功能,为了描述方便和代码简洁起见,只输出最后的报数结果来观察程序运行结果.这非常类似一个网站的客户访问统计,每个用户登录用一个线程模拟,线程运行时将一个表示计数的变量递增.程序 ...

  7. 秒杀多线程第三篇 原子操作 Interlocked系列函数

    上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...

  8. [OS] 多线程--原子操作 Interlocked系列函数

    转自:http://blog.csdn.net/morewindows/article/details/7429155 上一篇<多线程--第一次亲密接触 CreateThread与_begint ...

  9. posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序

    posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...

  10. 线程模型、pthread 系列函数 和 简单多线程服务器端程序

    一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...

随机推荐

  1. .NET 响应式编程 System.Reactive 系列文章(一):基础概念

    .NET 响应式编程 System.Reactive 系列文章(一):基础概念 引言 在现代软件开发中,处理异步事件和数据流已经成为常见的需求,比如用户输入.网络请求.传感器数据等.这些数据流通常是无 ...

  2. 「V 曲闲谈」《hello&bye,days》——记这周

      这周破事儿浓度真的,情绪渗透压巨大失调.   完全没有曲析啊喂,顶多当个阅读时 BGM.() 两度失眠   "砰--"   朦胧之中看见斜上方的室友起身.   "砰- ...

  3. 微服务实战系列(二)-注册中心Springcloud Eureka客户端-copy

    1. 场景描述 前几天介绍了下springcloud的Eureka注册中心(springcloud-注册中心快速构建),今天结合springboot-web介绍下eureka客户端服务注册. 2. 解 ...

  4. 如何使用C++ STL中的链表list

    1.声明链表 list<数据类型> 链表名称: 比如: list<int> listName;  //创建一个空链表listName list<int> listN ...

  5. Object类中toString()的使用

    /* * Object类中toString()的使用: * * 1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() * * 2. Object类中toString()的定义 ...

  6. Exfiltrated pg walkthrough Easy

    80端口弱口令admin admin 发现cms 搜索exp 发现漏洞 https://www.exploit-db.com/exploits/49876 找到敏感数据库密码和用户 ╔════════ ...

  7. RocketMQ实战—1.订单系统面临的技术挑战

    大纲 1.一个订单系统的整体架构.业务流程及负载情况 2.订单系统面临的技术问题一:下订单的同时还要发券.发红包.Push推送等导致性能太差 3.订单系统面临的技术问题二:订单退款时经常流程失败导致无 ...

  8. 使用Hyper-V或者VM虚拟机安装部署Ubantu

    下载Ubantu iso文件 Server版下载 桌面版下载 我使用的是22.04.3版本,目前22.04最新版是22.04.5版本 22.04下载 一.Hyper-V方式 1.安装Hyper-V 参 ...

  9. 首批!天翼云率先通过ITU国际标准认证!

    近日,天翼云通过国内唯一人工智能云平台领域的ITU国际标准评估--中国信通院组织的ITU-T F.AICP-GA人工智能云平台技术规范国际标准和<智算工程平台能力要求>国内标准一致性评估, ...

  10. WAIC 2024,好city啊!

    7月4日,"以共商促共享•以善治促善智"为主题的2024世界人工智能大会暨人工智能全球治理高/级别会议(简称"WAIC 2024")在上海举办.天翼云携智算创新 ...