InterlockedExchange

2023-10-30

 

 

LONG 
  InterlockedExchange(
    IN OUT PLONG  Target,
    IN LONG  Value
    );


 

InterlockedExchange(a,b)能以原子操作的方式交换俩个参数a, b,并返回a以前的值;因为InterlockedExchange 是原子函数,不会要求中止中断,所以交换指针的方式是安全的。

假设有线程1和线程2调用f()函数,线程1先调用到InterlockedExchange(&g, TRUE);线程2再调用时,函数InterlockedExchange()总返回TRUE,则线程2sleep(0);而直到线程1调用InterlockedExchange(&g, FALSE);后线程2才可能由于调用InterlockedExchange(&g,, TRUE),返回FALSE而退出循环接着工作。这样在//进行其他的操作这里就能操作共享数据而不会引起争议。当然这种方法会浪费cpu时间,因为cpu要不断地执行InterlockedExchange()函数,使用时应注意。

// 线程1
InterlockedExchange(&g, TRUE);				// 步一
//..
InterlockedExchange(&g, FALSE);				// 步三



//线程2
while(TRUE == InterlockedExchange(&g, TRUE))// 步二
{
	sleep(0);
	// 等待
}

// 线程2跳出循环了
											// 步四


 

 

Windows Driver Kit: Kernel-Mode Driver Architecture
InterlockedExchange

The InterlockedExchange routine sets an integer variable to a given value as an atomic operation.

LONG 
  InterlockedExchange(
    IN OUT PLONG  Target,
    IN LONG  Value
    );

Parameters

Target 
Pointer to a variable to be set to the supplied  Value as an atomic operation. 
Value 
Specifies the value to which the variable will be set. 

 

Return Value

InterlockedExchange returns the value of the variable at Target when the call occurred.

Headers

Declared in Wdm.h. Include Wdm.hNtddk.h, or Ntifs.h

Comments

InterlockedExchange should be used instead of ExInterlockedExchangeUlong, because it is both faster and more efficient. 

InterlockedExchange is implemented inline by the compiler when appropriate and possible. It does not require a spin lock and can therefore be safely used on pageable data.

A call to InterlockedExchange routine is atomic only with respect to other InterlockedXxx calls. 

Interlocked operations cannot be used on non-cached memory.

Callers of InterlockedExchange can be running at any IRQL.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

InterlockedExchange 的相关文章

  • 要称王,先做行业破坏者

    author skate time 2010 06 18 高端阅读78期 原标题为 世界 油王 的职场启示 我的人生 狠 字当头 有极强的故事性 白手起家 狂赚几亿美元 后遭朋友暗算 被踢出一手创办并成功发展40年的公司 同期不得不应对麻烦
  • 开发工程师的职场人生路

    新闻来源 伯乐在线 当你选择计算机或者电子 自控等专业进入大学时 你本来还是有机会从事其它行业的 可你毕业时执迷不悟 仍然选择了开发做为你的职业 真是自做孽不可活 不过 欢迎你和我一样加入这个被其它人认为是风光无限的 白领 吧 恭喜 你选择
  • IT自由职业者的成功秘诀

    原文作者Greg Jorgensen是一位典型的程序员 他从1974年开始编程 曾在耐克和苹果等公司任职 他专攻修复和完善受损 被遗弃和 半生不熟 的Web应用程序 尤其是后台语言是PHP的网站 我从事自由职业已有十余年了 有时候在我有全职
  • CSMA/CD和CSMA/CA详解

    CSMA CD CSMA CD Carrier Sense Multiple Access Collision Detect 即载波监听多路访问 冲突检测方法 在以太网中 所有的节点共享传输介质 如何保证传输介质有序 高效地为许多节点提供传
  • 2012,这一年我该做些啥

    这一年 我应该完成2011年没有完成的事情 让自己在2012没有遗憾 这一年 我应该想想未来的路 给自己一个职业规划 这一年 我应该提升一下自己的技术 让自己更加专业 这一年 我应该提升一下自己的思想 让自己的头脑更加丰富 这一年 我应该养
  • 数据库连接池实现原理

    数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接 并对外暴露数据库连接获取和返回方法 如 外部使用者可通过getConnection 方法获取连接 使用完毕后再通过releaseConnection 方法将连接返回 注意此时连
  • Linux 入门常用命令(ZT)

    1 Linux进入与退出系统 进入Linux系统 必须要输入用户的账号 在系统安装过程中可以创建以下两种帐号 1 root 超级用户帐号 系统管理员 使用这个帐号可以在系统中做任何事情 2 普通用户 这个帐号供普通用户使用 可以进行有限的操
  • 硬件参数 调整 麦克风MIC灵敏度 原理

    1 先看MIC电路连接 这是个差分输入的例子 MICP2和MICN2是一对差分信号 经过C156的滤波 输入到MIC两端 MIC两引脚分别是到地和供电 上图的R177参数就关系到MIC输入的灵敏度 2 电阻R177影响灵敏度分析 MICBI
  • fgets函数的理解

    fget函数的原型如下 char fgets char buf int n FILE fp 功能 从文件流读取一行 送到缓冲区 使用时注意以下几点 1 当遇到换行符或者缓冲区已满 fgets就会停止 返回读到的数据 值得注意的是不能用fge
  • c/c++笔试面试题_6

    几个简单的c 面试题 2006 10 14 14 50 今天偶然看见这几个面试题 很有感触 想起一年前自己的求职经历 1 引言 本文的写作目的并不在于提供C C 程序员求职面试指导 而旨在从技术上分析面试题的内涵 文中的大多数面试题来自各大
  • 英国程序员的工资

    我在英国做程序员工作将近2年了 接触到他们当地的一些的程序员 他们的大概工资如下 一个刚刚从学校毕业的计算机系大学生 月工资水平大概是2000到3000英镑左右 约合人民币3万至4 5万元 这是税前收入 英国是一个高税收高福利的国家 如果你
  • 修改别人代码的原则

    工作过程中难免会涉及到修改或维护别人写的代码 如 代码原作者请假 离职 或相关的bug落到了你的头上 或用别人写的通用方法不爽时 如果碰到修改别人的代码时 需要注意哪些事项呢 1 和原作者沟通 当用到了他人写的通用方法 又感觉不爽时 如果原
  • 项目开发中开发文档出现的问题及其对策

    在常规项目开发管理中 很多项目专家都提出要用各种各样规范的文档对开发工作进行管理 但是在日常工作中 由于这些文档的编写的管理工作都是相当繁重的 以致让一线员工不能主动积极使用 更新这些文档 长期下来 这些管理型的 设计型的文档所发挥的作用就
  • 程序员水平分级

    导读 近日 whattofix com刊登了一篇 DanielMarkham的文章 What Level Programmer Are You 文内将参差不齐的程序员按照技术水平分为从 只读 到 上帝 共十一个阶段 以帮助广大程序员找到自身
  • 运放稳定性连载21:电容性负载的稳定性——具有双通道反馈的RISO(2)

    现在 我们必须测量如图10 6所示的Zo 小信号AC开环输出阻抗 该Tina SPICE测试电路将测试空载OPA177的Zo R2和R1以及LT为低通滤波器函数提供了一条AC通道 这样 使得我们能将DC短路和AC开路一起并入反馈电路 DC工
  • 高效程序员的40个好习惯和行为方式

    每一个好的习惯 开头都会相应有一个唱反调的句子哦 1 做事 出了问题 第一重要的是确定元凶 找到那个人 一旦证实了是他的错误 就可以保证这样的问题永远也不会再发生了 指责不会修复bug 把矛头对准问题的解决办法 而不是人 这是真正有用处的正
  • GIF演示排序算法

    最近在准备笔试 面试 看了不少关于排序算法的知识 总感觉代码有余 直观不足 所以想利用直观的GIF动图来演示各种排序算法 1 插入排序 Insertion Sort 1 1算法简介 插入排序 Insertion Sort 的算法描述是一种简
  • 前端vue实现分页功能

    前端Vue实现分页功能 我们都知道在spring boot项目中安装pagehelper可以实现分页功能 但是在vue中也能在前端实现分页 1 首先 在data中定义以下变量 data return list null listLoadin
  • 力软-获取jfGrid值,并改变值

    问题 页面中jfGrid为动态加载出来的 在js中动态改变cell值之后 需要将jfGrid的值重新赋值一遍 解决 var rowindex 0 jfgrid layout 0 jfGridGet rowdatas rowindex F R
  • 面经-Bosch博世无锡&UL美华

    工作总算有所眉目了 太多的总结暂时还没有太多心情来理清楚 先来两个面经 给可能现在或以后需要的人们1 Bosch 博世无锡柴油系统博世公司 业内的人都知道 汽车部件的巨无霸 最近几年才来到中国 虽然比起德尔福有些稍晚 但发展前景值得期待 无

随机推荐

  • IntelliJ IDEA 2018.3.3版本破解,亲测可用

    一 到官网下载收费版本 如下 二 安装 破解 1 下载http idea lanyus com 标题 2 找到intelliJ IDEA的安装目录的bin目录 然后把下载的JetbrainsIdesCrack 4 2 release sha
  • 逻辑滚动条LVM测试记录1

    逻辑滚动条LVM测试记录 一 由partition或disk到实体滚动条PV的过程 1 划分出系统标示符为8e00的partition gdisk l dev sda命令查看现有分区情况 系统标示符 system ID 指的就是code一项
  • Python缺失值处理

    没有高质量的数据 就没有高质量的数据挖掘结果 数据值缺失是数据分析中经常遇到的问题之一 当缺失比例很小时 可直接对缺失记录进行舍弃或进行手工处理 但在实际数据中 往往缺失数据占有相当的比重 这时如果手工处理非常低效 如果舍弃缺失记录 则会丢
  • 西门子V90伺服驱动器的面板控制

    前言 本文主要讲解一下伺服驱动器的面板控制 大致了解它的功能 一 V90概述 概述 SINAMICS V90是西门子推出的一款小型 高效便捷的伺服系统 它作为 SINAMICS 驱动系列家族的新成员 与SIMOTICS S 1FL6 伺服电
  • 启动Jmeter时遇到的几种错误

    1 权限不够 解决办法 用管理员权限运行 2 sdk版本太低 解决办法 1 查看当前sdk版本 java version 2 安装sdk1 7或以上版本 jmeter3 0版本要用sdk1 7及以上版本 3 配置的环境变量没有生效 在ubu
  • Spring Boot实战之配置使用Logback进行日志记录

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Spring Boot实战之配置使用Logback进行日志记录 在这篇文章中我们将讨论在Spring Boot中使用Logback 在Spring Boot中使用Logba
  • 开源 AI库Stable Diffusion 介绍

    Stable Diffusion 是一个用于生成高质量 AI 绘画的 Python 库 以下是一些使用 Stable Diffusion 的基本步骤 安装 Stable Diffusion 库 您可以使用 pip 安装 命令如下 pip i
  • 性能测试包括哪些方面?

    性能测试 通过自动化测试工具模拟多种正常 峰值 以及异常的负载情况下对系统各项性能指标进行的测试 负载测试 压力测试 容量测试都属于性能测试 性能测试指标是衡量系统性能的评价标准 主要关注一些响应时间 并发用户 并发 点击率 吞吐量 TPS
  • Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用

    前言 一直觉得无论是从行业形式来看 还是从就业角度说 学习JNI NDK开发是一条必经之路 很多说Android和IOS几乎没有市场了 其实只能说现在开发APP的需求没那么多了 再加上之前培训机构疯狂向市场输出Android IOS开发人员
  • [转]文档去重算法:SimHash和MinHash

    simhash与重复信息识别 来源 http grunt1223 iteye com blog 964564 在工作学习中 我往往感叹数学奇迹般的解决一些貌似不可能完成的任务 并且十分希望将这种喜悦分享给大家 就好比说 老婆 出来看上帝 随
  • 【Linux】Linux环境搭建

    目录 1 Linux的发展历史 2 Linux环境的搭建 为什么要使用Linux 环境准备 3 使用 XShell 远程登陆 Linux 下载安装 XShell 使用 XShell 登陆主机 1 Linux的发展历史 要知道Linux操作系
  • uboot使用

    我一贯认为 对于一个技术类的东西 你连用都不会用 那根本就不可能会开发 就好像一个人连Linux不会用 那还谈何开发Linux程序呢 同样的要开发和移植U boot 首先要对U boot有一定的了解 起码要会使用 所以这里我们首先熟悉一下U
  • 解决报错Fatal error in launcher

    换电脑重装python 打算安装第三方库的时候出现错误 Fatal error in launcher 然而在网上搜到的大多数是解决 Fatal error in launcher Unable to create process usin
  • 网络摄像头rtsp流延迟无法解决,改用Mjpeg流成功保证低延迟稳定传输,并成功解决opencv对Mjpeg流支持问题

    最近做的一个小项目 是需要通过一个网络实时将画面传输给后端进行处理 因为涉及到对运动的捕捉 延迟要求较为严格 我的网络摄像头是Z CAM E2 M4 内置了rtsp流 使用rtsp流时总会产生2秒的延迟 直接使用ffmpeg播放依然存在2s
  • 使用NumPy索引和切片操作可以方便地访问和操作多维数组。本文将介绍如何使用NumPy索引语法来获取指定行之后的所有数据行的数值内容。

    使用NumPy索引和切片操作可以方便地访问和操作多维数组 本文将介绍如何使用NumPy索引语法来获取指定行之后的所有数据行的数值内容 首先 确保已经安装了NumPy库 可以使用以下命令在Python中安装NumPy pip install
  • imx6的mipi接口在qnx系统中的调试技巧,vcapture-test功能应用

    锋影 e mail 174176320 qq com 在调试 MIPI DSI CSI 的一些经验总结 因为协议有专门的文档 所以这里就记录一些常用知识点 一 D PHY 1 传输模式 LP Low Power 模式 用于传输控制信号 最高
  • linux如何指令输入,linux基本操作指令

    1 linux kernel 内核 2 什么时shell 保护系统内核并对外提供操作接口的软件 linux中默认的shell是 bash 3 在shell如何运行命令 命令行字符含义 kiosk foundation0 Desktop 1
  • Linux(未完,待续。。)

    目录 一 linux基础 二 常用命令 1 文件处理命令 1 1命令格式与目录处理命令ls 1 2 目录处理命令 2 权限管理命令 2 1 chmod 2 2 chown 2 3 chgrp 2 4 umask 3 文件搜索命令 3 1 f
  • 1013 数素数

    令 Pi 表示第 i 个素数 现任给两个正整数 M N 10 4 请输出 PM 到 P N 的所有素数 输入格式 输入在一行中给出 M 和 N 其间以空格分隔 输出格式 输出从 PM 到PN 的所有素数 每 10 个数字占 1 行 其间以空
  • InterlockedExchange

    LONG InterlockedExchange IN OUT PLONG Target IN LONG Value InterlockedExchange a b 能以原子操作的方式交换俩个参数a b 并返回a以前的值 因为Interlo