先让我们来复习下小学知识

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系列函数的更多相关文章

  1. 读书笔记——Windows核心编程(8)Interlocked单向链式栈

    SLists使用了无锁算法来保证原子同步,以提升系统性能,避免了诸如优先级挂和互锁的问题. 注意:所有的链表项必须对齐到MEMORY_ALLOCATION_ALIGNMENT.否则会出现奇葩的错误. ...

  2. 读书笔记——Windows核心编程(2)比较字符串

    1. CompareString 以符合用户语言习惯的方式,EX版本使用UNICODE int CompareString( __in LCID Locale, __in DWORD dwCmpFla ...

  3. 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存

    微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3  堆(大量的小型对象) 预订地址空间区域Vi ...

  4. 读书笔记——Windows核心编程(13)Windows内存体系结构

    对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间. 每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存. 这4GB其实是虚拟地址空 ...

  5. 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框

    1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...

  6. 《Windows核心编程》读书笔记 上

    [C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...

  7. C++Windows核心编程读书笔记

    转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...

  8. 【转】《windows核心编程》读书笔记

    这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...

  9. 《windows核心编程系列》十八谈谈windows钩子

    windows应用程序是基于消息驱动的.各种应用程序对各种消息作出响应从而实现各种功能. windows钩子是windows消息处理机制的一个监视点,通过安装钩子能够达到监视指定窗体某种类型的消息的功 ...

随机推荐

  1. 【转】sql server开启全文索引方法

    利用系统存储过程创建全文索引的具体步骤: 1) 启动数据库的全文处理功能 (sp_fulltext_database) 2) 建立全文目录 (sp_fulltext_catalog) 3) 在全文目录 ...

  2. IOS开发UI基础之UIScrollView

    什么是UIScrollView ● 移动设备的屏幕⼤大⼩小是极其有限的,因此直接展⽰示在⽤用户眼前的内容也相当有限 ● 当展⽰示的内容较多,超出⼀一个屏幕时,⽤用户可通过滚动⼿手势来查看屏幕以外的内容 ...

  3. HTML5表单元素的学习

    本文内容              认识表单              基本元素的使用              表单高级元素的使用              现学现卖--创建用户反馈表单 ★  认识 ...

  4. C#学习笔记(1) --简叙.net体系结构

    1 C#与.NET的关系 (1) C#是专门为与Microsoft的.Net Framework一起使用而设计的. (2) C#是一种基于面向对象设计方法的的语言. (3) 需要注意的是,C#就其本身 ...

  5. easyui数据网格视图(Datagrid View)的简单应用

    下面介绍datagrid的数据网格详细视图和数据网格的分组视图 1.先引用的js和css文件 1)包含eauyui必备的四个文件easyui.css,icon.css, jquery-min.js.j ...

  6. php获取textarea的值并处理回车换行的方法

    //注:\n是用双引号包的的,双引号!!双引号!!! explode("\n",$row[0]['value']

  7. KM算法

    链接: http://blog.csdn.net/lvshubao1314/article/details/41702291 

  8. Android从零开始——Android开发环境的安装

    Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...

  9. 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工具进行开发,且将 ...

  10. Microsoft SQL Server,附加数据库 错误:Error 916解决方法

    错误信息:错误提示:标题: Microsoft SQL Server Management Studio Express ——————————  无法为此请求检索数据. (Microsoft.SqlS ...