用于线程同步的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用户线程模型 “线程实现”建立在“进程控制”机制之上,由用 ...
随机推荐
- 搭建gitlab私有仓库
1.下载gitlab 首先在 /etc/yum.repos.d/目录下配置gitlab下载镜像源. # 进入目录 /etc/yum.repos.d/ cd /etc/yum.repos.d/ # 创建 ...
- Python语言中进程、线程、协程执行效率分析
- Appium_iOS 配置
一. iOS Driver 配置 options = AppiumOptions()options.load_capabilities({ "platformName": &quo ...
- C#调用IronOcr识别文字不理想
识别文字不理想,不知道什么原因,文字太小就几乎无法识别.... void Test() { DateTime d1 = DateTime.Now; var ocr = new IronTesserac ...
- 2020年最新版区块链面试题2-copy
1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...
- 微服务技术架构、监控、Docker、服务治理等详解
1.什么是微服务 1)一组小的服务(大小没有特别的标准,只要同一团队的工程师理解服务的标识一致即可) 2)独立的进程(java的tomcat,nodejs等) 3)轻量级的通信(不是soap,是htt ...
- Jdk8新特性目录总结
--------------------------------------- Lambda表达式 接口新增方法 四大函数式接口 方法引用 Stream(1) Stream(2) Stream(3) ...
- Codeforces Round 998 (Div. 3)
题目链接:Codeforces Round 998 (Div. 3) 总结:复建,Cwa两发,E读假题了. A. Fibonacciness tag:签到 Solution:简单模拟一下即可. voi ...
- python 输入与输出函数,格式化输出,注释,变量,整数,浮点数,字符串,布尔等说明
python 输入函数:input 语法:input("提示文字") 注意:用input输入的内容都是字符串: 输出函数:print 语法:print() -------- ...
- ASP.NET Core 6 基础入门系列(1) ASP.NET Core 6.0 简介
系列目录 [已更新最新开发文章,点击查看详细] 预备知识1: C#5.C#6.C#7.C#8.C#9.C#10 预备知识2: .NET 对比 .NET Framework 预备知识3: ...