读书笔记——Windows核心编程(8)Interlocked系列函数
先让我们来复习下小学知识
A+B=C//式中A为被加数,B为加数。 A-B=C//式中A为被减数,B为减数。
再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功。
------------------by wls------------------我是可爱的分割线------------------by wls------------------
必须确保传给这系列函数的变量地址是经过对齐的,否则可能导致失败。
对齐可使用C运行库的_aligned_malloc函数
void * _aligned_malloc(
size_t size,
size_t alignment
);
Interlocked系列函数:
1. 原子操作
2. 执行得极快(无需在用户模式和内核模式间切换)
------------------by wls------------------我是调皮的分割线------------------by wls------------------
InterlockedAdd,加法。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedAdd(
in UINT dest,//被加数(被减数),结果保存在这里
in UINT value,//加数(减数)
out UINT original_value//返回的原始值(dest)
);
InterlockedAnd,and。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedAnd(
in UINT dest,//结果保存在这里
in UINT value,//输入值
out UINT original_value//返回的原始值(dest)
);
InterlockedOr,or。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
<span style="color:#000000;">void InterlockedOr(
in UINT dest,
in UINT value,
out UINT original_value
);</span>
InterlockedXor,xor。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedXor(
in UINT dest,
in UINT value,
out UINT original_value
);
InterlockedCompareExchange,比较成功则替换值。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedCompareExchange(
in UINT dest,//被比较值
in UINT compare_value,//比较值
in UINT value,//比较成功,dest的值被替换为value
out UINT original_value//返回的原始值(dest)
);
InterlockedCompareStore,比较(compares the input to the comparison value, atomically)只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedCompareStore(
in UINT dest,//The destination address
in UINT compare_value,//The comparison value.
in UINT value//The input value.
);
InterlockedExchange,交换。只能用于标量类型资源(scalar-typed resources)和共享内存变量,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedExchange(
in UINT dest,//待替换值
in UINT value,//替换值
out UINT original_value//返回的原始值(dest)
);
InterlockedMax,查找最大值。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedMax(
in UINT dest,
in UINT value,
out UINT original_value
);
InterlockedMin,查找最小值。只能用于int或者uint,适用于:1. 共享内存变量类型;2. 资源变量类型;3. 局部变量类型。
void InterlockedMin(
in UINT dest,
in UINT value,
out UINT original_value
);
转载请注明出处http://blog.csdn.net/wlsgzl/article/details/17019121。
读书笔记——Windows核心编程(8)Interlocked系列函数的更多相关文章
- 读书笔记——Windows核心编程(8)Interlocked单向链式栈
SLists使用了无锁算法来保证原子同步,以提升系统性能,避免了诸如优先级挂和互锁的问题. 注意:所有的链表项必须对齐到MEMORY_ALLOCATION_ALIGNMENT.否则会出现奇葩的错误. ...
- 读书笔记——Windows核心编程(2)比较字符串
1. CompareString 以符合用户语言习惯的方式,EX版本使用UNICODE int CompareString( __in LCID Locale, __in DWORD dwCmpFla ...
- 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存
微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3 堆(大量的小型对象) 预订地址空间区域Vi ...
- 读书笔记——Windows核心编程(13)Windows内存体系结构
对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间. 每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存. 这4GB其实是虚拟地址空 ...
- 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框
1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- C++Windows核心编程读书笔记
转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...
- 【转】《windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
- 《windows核心编程系列》十八谈谈windows钩子
windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...
随机推荐
- “康园圈--互联网+校园平台“项目之sprint2
一.sprint2任务列表 1.部署框架,并上传代码到github. 2.原型设计 * 设计首页界面原型(包括功能公告.快速通道等展示栏) * 设计店铺浏览页面原型 * 设计店内浏览页面原型 * 设计 ...
- 使用MyBatis查询int类型字段,返回NULL值时报异常的解决方法
当配置mybatis返回int类型时 select id="getUserIdByName" parameterType="string" resultType ...
- C++ - 多线程的实现
支持多线程可谓是C++语言最大的变化之一. 此前,C++只能利用操作系统的功能(Unix族系统使用pthreads库),或是例如OpenMP和MPI这些代码库,来实现多核计算的目标. C++本身并没有 ...
- 【ASP.NET MVC 】让@Ajax.ActionLink获取的数据不进Cache
刚玩这个东西的时候,发现IE会进Cache,不管怎么删除,修改,后台删除了,前台还是一样,找了一下,HTML5只提供了 <meta http-equiv="pragma" c ...
- 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink
[源码下载] 重新想象 Windows 8.1 Store Apps (75) - 新增控件: Hub, Hyperlink 作者:webabcd 介绍重新想象 Windows 8.1 Store A ...
- 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector
[源码下载] 与众不同 windows phone (34) - 8.0 新的控件: LongListSelector 作者:webabcd 介绍与众不同 windows phone 8.0 之 新的 ...
- 继续转 [转]php版本的cron定时任务执行器
由于服务器crontab只能精确到分钟,那程序的起点也是分钟. 一共包括但部分: 一.配置文件: 配置文件是用来返回要执行的定时任务文件,注意一下*的使用就行了,有两个模式,就是 Y-m-d H:i ...
- 泛函编程(22)-泛函数据类型-Monoid In Action
在上一节我们讨论了Monoid的结合性和恒等值的作用以及Monoid如何与串类元素折叠算法相匹配.不过我们只示范了一下基础类型(primitive type)Monoid实例的应用,所以上一节的讨论目 ...
- Java生成公私钥对
public static synchronized KeyPair generateRSAKeyPair(int keysize, BigInteger publicExponent) { try ...
- [程序人生]前途无"亮‘’的大学
转眼之间就到大四了,今天晚上很迷茫,很纠结,想了好多,好多,真的,长大之后,自从第一次失恋之后,第一次会想到这么的多. 嗯,先自我介绍哈吧,我是从云南的大山里走出来的孩子,什么样的大山,就是到 ...