原子访问

通过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. linux 安装 Ollama 框架

    概述 Ollama 是一款旨在简化大语言模型(LLM)本地部署的工具,支持 Windows.Linux 和 MacOS 系统.它提供了一个用户友好的环境,让开发者可以轻松地运行和调优如 Qwen.Ll ...

  2. Solution Set -「LGR-126」洛咕咕的 NOIP 模拟赛

      机房在三楼, 不在五楼.   三楼确实有阶梯教室.   三楼向外望是一楼大厅屋顶所以看上去不高.   十一点前必须离开科技楼是因为爱因斯坦要锁大门.   我不会被自己写的东西清空 san 值.   ...

  3. Spring Cloud Alibaba实战,从微服务架构到基本服务配置

    https://blog.csdn.net/itcast_cn/article/details/124558887 Spring Cloud Alibaba 实战 1目标理解什么是微服务架构理解什么是 ...

  4. 联想服务器安装Centos8.3

    准备 1.服务器型号:ThinkSystem SR158 2.安装系统:Centos8.3 3.刻镜像工具:rufus 启动盘制作 我这里选择的是rufus,没有用UltraISO,因为制作的镜像经常 ...

  5. OSI七层经典模型架构以及网络的基本概念

    在大.中型网络中,通常通过模块化方式将网络功能结构进行分解.但是在各个模块内部,还是存在结构的扩展和弹性问题. 譬如一个园区网络需要接入大量用户等,这个问题一般通过网络的层次化来解决. 传统的网络采用 ...

  6. LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中)

    大家好,我是忍者程序员.上一篇文章我们讨论了如何科学地刷题,今天我要带大家深入了解这100道精选题目背后的分类逻辑.作为一名面试官,我希望通过这篇文章,为大家绘制一张完整的算法知识地图. 为什么要按类 ...

  7. 更快更省更好用!天翼云云原生一体机iStack打通物云最后一公里!

    近年来,随着企业数字化转型的深入,从传统 IT 架构向云原生架构转型,已经成为企业谋求更高质量发展的必由之路.然而,云原生技术复杂度高,运维成本高,且技术工具间的集成度不足.打破云原生技术应用门槛,以 ...

  8. Q:CRON表达式,Linux和Java的不同写法

    CRON表达式是一个字符串,包含五个到七个由空格分隔的字段(每种软件不一样),表示一组时间,通常作为执行某个程序的时间表. 调度精度: Linux的cron调度精度为分钟级别,最小粒度为分钟,而Jav ...

  9. MySQL主从复制-原理实战

    一.原理 主从复制架构图:主从复制原理: Mysql 中有一种日志叫做 bin 日志(二进制日志).这个日志会记录下所有修改了数据库的SQL 语句(insert,update,delete,creat ...

  10. Net跨平台硬件信息查询库 Hardware.Info:全面获取系统硬件详情

    Hardware.Info 是一个基于 .NET Standard 2.0 的跨平台库,提供了硬件信息查询的功能,支持 Windows.Linux 和 macOS 操作系统.该库通过不同平台下的系统接 ...