读书笔记——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消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...
随机推荐
- 【转】sql server开启全文索引方法
利用系统存储过程创建全文索引的具体步骤: 1) 启动数据库的全文处理功能 (sp_fulltext_database) 2) 建立全文目录 (sp_fulltext_catalog) 3) 在全文目录 ...
- IOS开发UI基础之UIScrollView
什么是UIScrollView ● 移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ● 当展⽰示的内容较多,超出⼀一个屏幕时,⽤用户可通过滚动⼿手势来查看屏幕以外的内容 ...
- HTML5表单元素的学习
本文内容 认识表单 基本元素的使用 表单高级元素的使用 现学现卖--创建用户反馈表单 ★ 认识 ...
- C#学习笔记(1) --简叙.net体系结构
1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...
- easyui数据网格视图(Datagrid View)的简单应用
下面介绍datagrid的数据网格详细视图和数据网格的分组视图 1.先引用的js和css文件 1)包含eauyui必备的四个文件easyui.css,icon.css, jquery-min.js.j ...
- php获取textarea的值并处理回车换行的方法
//注:\n是用双引号包的的,双引号!!双引号!!! explode("\n",$row[0]['value']
- KM算法
链接: http://blog.csdn.net/lvshubao1314/article/details/41702291
- Android从零开始——Android开发环境的安装
Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...
- SDK Build Tools revision (19.0.3) is too low for project Min
SDK Build Tools revision (19.0.3) is too low for project Min(转) 如果你正在使用Android Studio工具进行开发,且将 ...
- Microsoft SQL Server,附加数据库 错误:Error 916解决方法
错误信息:错误提示:标题: Microsoft SQL Server Management Studio Express —————————— 无法为此请求检索数据. (Microsoft.SqlS ...