用于线程同步的Interlocked系列函数主要有哪些
原子访问
通过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系列函数主要有哪些的更多相关文章
- 原子操作 Interlocked系列函数
		
上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...
 - (转)原子操作 Interlocked系列函数
		
上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...
 - 多线程面试题系列(3):原子操作 Interlocked系列函数
		
上一篇中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错.这也非常类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将 ...
 - 多线程--原子操作 Interlocked系列函数
		
[转]原文地址:http://blog.csdn.net/morewindows/article/details/7429155 线程同步与互斥: 互斥主要指多个线程不能同时访问一个资源,如打印机就是 ...
 - 读书笔记——Windows核心编程(8)Interlocked系列函数
		
先让我们来复习下小学知识 A+B=C//式中A为被加数,B为加数. A-B=C//式中A为被减数,B为减数. 再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功. -- ...
 - 多线程笔记--原子操作Interlocked系列函数
		
前面写了一个多线程报数的功能,为了描述方便和代码简洁起见,只输出最后的报数结果来观察程序运行结果.这非常类似一个网站的客户访问统计,每个用户登录用一个线程模拟,线程运行时将一个表示计数的变量递增.程序 ...
 - 秒杀多线程第三篇 原子操作 Interlocked系列函数
		
上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...
 - [OS] 多线程--原子操作 Interlocked系列函数
		
转自:http://blog.csdn.net/morewindows/article/details/7429155 上一篇<多线程--第一次亲密接触 CreateThread与_begint ...
 - posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
		
posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...
 - 线程模型、pthread 系列函数 和 简单多线程服务器端程序
		
一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属于1:1模型. (一).N:1用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...
 
随机推荐
- .NET 响应式编程 System.Reactive 系列文章(一):基础概念
			
.NET 响应式编程 System.Reactive 系列文章(一):基础概念 引言 在现代软件开发中,处理异步事件和数据流已经成为常见的需求,比如用户输入.网络请求.传感器数据等.这些数据流通常是无 ...
 - 「V 曲闲谈」《hello&bye,days》——记这周
			
这周破事儿浓度真的,情绪渗透压巨大失调. 完全没有曲析啊喂,顶多当个阅读时 BGM.() 两度失眠 "砰--" 朦胧之中看见斜上方的室友起身. "砰- ...
 - 微服务实战系列(二)-注册中心Springcloud Eureka客户端-copy
			
1. 场景描述 前几天介绍了下springcloud的Eureka注册中心(springcloud-注册中心快速构建),今天结合springboot-web介绍下eureka客户端服务注册. 2. 解 ...
 - 如何使用C++ STL中的链表list
			
1.声明链表 list<数据类型> 链表名称: 比如: list<int> listName; //创建一个空链表listName list<int> listN ...
 - Object类中toString()的使用
			
/* * Object类中toString()的使用: * * 1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() * * 2. Object类中toString()的定义 ...
 - Exfiltrated pg walkthrough	Easy
			
80端口弱口令admin admin 发现cms 搜索exp 发现漏洞 https://www.exploit-db.com/exploits/49876 找到敏感数据库密码和用户 ╔════════ ...
 - RocketMQ实战—1.订单系统面临的技术挑战
			
大纲 1.一个订单系统的整体架构.业务流程及负载情况 2.订单系统面临的技术问题一:下订单的同时还要发券.发红包.Push推送等导致性能太差 3.订单系统面临的技术问题二:订单退款时经常流程失败导致无 ...
 - 使用Hyper-V或者VM虚拟机安装部署Ubantu
			
下载Ubantu iso文件 Server版下载 桌面版下载 我使用的是22.04.3版本,目前22.04最新版是22.04.5版本 22.04下载 一.Hyper-V方式 1.安装Hyper-V 参 ...
 - 首批!天翼云率先通过ITU国际标准认证!
			
近日,天翼云通过国内唯一人工智能云平台领域的ITU国际标准评估--中国信通院组织的ITU-T F.AICP-GA人工智能云平台技术规范国际标准和<智算工程平台能力要求>国内标准一致性评估, ...
 - WAIC 2024,好city啊!
			
7月4日,"以共商促共享•以善治促善智"为主题的2024世界人工智能大会暨人工智能全球治理高/级别会议(简称"WAIC 2024")在上海举办.天翼云携智算创新 ...