嵌入式linux中的锁机制,跟涛哥一起学嵌入式第11集:一个实现锁机制非常有意思的宏...

QQ群(宅学部落)有位学员问了一个很奇怪的宏,觉得很有意思,特拿来分享,它的定义如下:

e4be1228f1ebabece50ed41c339e800a.png

我们知道,宏定义其实就是为了方便,给一串代码字符串定义一个别名。有时候字符串过于复杂,我们可以分多行书写,然后使用逻辑连接符“\”连接起来,表示一个完整的字符串。但是分析上面的宏定义,你会发现它分别定义了2个宏,但是呢,又使用了一对大括号括起来,很有欺骗性:看起来很像语句表达式,但是呢,有没有小括号括起来,是不是很奇怪?

调用的时候,使用方法更是奇怪,如果我们单独使用AA()或BB()调用,你会发现编译根本通不过,这是为什么呢?我们可以使用命令对上面的程序作预处理展开:

$ gcc -E main.c

预处理器对宏定义展开后,你会发现,会报语法错误,但是我们通过AA();BB();这种调用方式呢,就可以避免语法错误,可以顺利编译通过并运行。

这两个有意思的宏,要成对出现,才能避免程序编译错误,如果你只使用了其中一个,程序就编译通不过,彻底歇菜了。这是谁写的代码啊?为什么要这么写?其实正是这对宏的有意思之处,我们可以稍作封装:

d5bcf87c51464e9467142956021cb12d.png

通过上面的修改,你会发现这对宏变成了一对加锁加锁功能,可以实现原子操作的临界区功能。而且更巧妙的是这对宏利用了C语法编译检查,强制程序员成对使用,否则就会报语法编译错误。因此,这种强制成对使用,也就避免了加锁解锁不成对出现时引起的死锁问题。

C语言博大精深,任何一段代码仔细分析,仔细推敲,都有很多编程技巧和精华在里面,感觉该学员提出的一个好问题,也欢迎更多的学员遇到问题踊跃提问、勤于思考,大家一起学习、努力、进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux core 永久生效,【调试】Core Dump是什么?Linux下如何正确永久开启?

内容简介【调试】Core Dump是什么?Linux下如何正确永久开启?Core Dump是什么?Linux下如何正确永久开启?Core Dump是什么?Core Dump乍听之下很抽象。当程序运行的过程中异常终止或崩溃,操作系统会将程序当时…

用于用户C语言标识符,下列可用于C语言用户标识符的一组是( )

摘要:下列不属于骨肉瘤患者常见护理问题()于C语言用户组Since people send nonverbal signals through multiple channels simultaneously, it is impossible to increase our nonverbal communication competence by becoming more aware of how it operates in sp…

c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...

1.看程序运行截图吧!!由于博主本人较笨,就不动画演示了,如果动画的话可能将是一个漫长的过程!猜数字游戏.png2.游戏题目随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数…

双端堆c语言,数据结构——双端堆(C语言)

定义双端堆:是一棵完全二叉树,该完全二叉树要么为空,要么同时满足下列性质:(1) 根节点不包含元素;(2) 左子树是一个最小堆;(3) 右子树是一个最大堆;(4) 如果右子树不空,令i是左子树中…

C语言和我的世界指令哪个难,我的世界难度有什么区别 难度选择指令介绍

我的世界中的难度(Difficulty)可以在Minecraft的选项菜单内切换。更改这个选项将直接影响到游戏本身。选项中并没有设定影响攻击性生物的可生成数量,包括和平模式。目前游戏共有和平、简单、普通和困难4种难度。我的世界难度区别和平:会生成攻击性生物&a…

w ndows10即将停止更新,微软开始警告Windows 10 v1909用户即将停止更新服务

如果您仍在运行Windows 10版本1909,版本1903或更早版本,则可能已经在系统任务栏中注意到一条新消息:Windows 10版本即将终止服务。根据Windows 10 May 2020 Update或2020年10月Update。为了将用户升级到最新版本的Windows 10,“您…

Android10不能用谷歌,谷歌真的很严格,一大波老APP将不能在安卓10.0运行

苹果iOS的一大优点就是软件生态,第三方APP都会主动适配新的iOS系统以及手机。虽然说Android的开放性是也是一大优点,但是第三方软件参差不齐的优化适配水平也让安卓的用户非常头疼。不过谷歌每年都在致力于让Android的软件生态更好。根据XDA的报道&#…

c语言编程季节输出春夏秋冬,c语言编程题: 用枚类型定义春、夏、秋、冬四个季节...

满意答案bcabcdefg2013.07.28采纳率&#xff1a;49% 等级&#xff1a;12已帮助&#xff1a;5373人#includeenum season{spring 1,summer,autumn,winter,};season GetSeasonByMonth(char month){if(month < 3 && month>1)return spring;else if(month < 6 …

华为升级harmonyos的机型名单,华为鸿蒙 OS 2.0 系统适配名单已出,四月推送,天玑机型暂时无缘...

原标题&#xff1a;华为鸿蒙 OS 2.0 系统适配名单已出&#xff0c;四月推送&#xff0c;天玑机型暂时无缘华为官方在 2020 年发布了旗下自研系统“HarmonyOS 2.0”版本&#xff0c;发布会现场展示了 HarmonyOS 2.0 开发者 Beta 版本&#xff0c;并开启开发者 Beta 的公测。此外…

android 混合开发 图片,混合开发的大趋势之一React Native之Image

文章是宝宝自己写的&#xff0c;你可以转走&#xff0c;标明哪来的就行王亟亟的大牛之路国庆这些天要么旅游要么WOW&#xff0c;感觉整个人都废了。。直接从黄种人晒成了非洲大酋长。。然而还是无橙&#xff0c;这礼拜要做7天&#xff0c;昨天把单元测试的东西整完后今天下午抽…

html5实现无缝滚动的效果,基于JavaScript实现无缝滚动效果

本文实例为大家分享了JavaScript实现无缝滚动效果展示的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下首先应该区分样式中的绝对定位和相对定位&#xff0c;一般来说&#xff0c;移动的单位为绝对定位&#xff0c;在这个实例中&#xff0c;移动的Ul就是绝对定位 &am…

html5内联框去滚动条,如何优雅的实现内联滚动条(前端底部固定方法 )

我是一个网易云粉&#xff0c;有没有发现网易云音乐两边的滚动条是互不相干的&#xff0c;而且头部和底部都是固定的&#xff0c;这是如何实现的呢&#xff1f;先看个图吧。网易云音乐的页面其实要实现这样一个内联滚动条不难。我们可以先从实现一个内联滚动条开始实现。实现方…

html中未填写完提示未填写,亚马逊官方试题(开店及运营篇)

六.玩转新账号单选1、可以在亚马逊网站投放广告吗&#xff1f;A:部分可以投放&#xff0c;部分则由亚马逊控制B:全部不可以C:全部都可以D:只可在网站页面有责投放 A2、恢复移动板块初始界面后台什么位置设置A:无法恢复B:需手动逐一恢复 C:右上角Setting里设置D:左下角设置 D3、…

科学计算机 分数计算公式,Z分数(标准分数,Z-Score)公式与在线计算器_三贝计算网_23bei.com...

输入原始数据(X)、平均数(M)、标准差(S)、Z分数值(Z)等4个变量中任意3个已知变量&#xff0c;点击计算按钮&#xff0c;可快速求出求出未知变量。Z 分数也叫标准分数(standard score)&#xff0c;能够真实的反应一个分数距离平均数的相对标准距离。如果我们把每一个分数都转换成…

说唱计算机网红,首档喊麦节目太奇葩,蹭了说唱热度,还请了被封杀网红当导师...

原标题&#xff1a;首档喊麦节目太奇葩&#xff0c;蹭了说唱热度&#xff0c;还请了被封杀网红当导师首档喊麦节目太奇葩&#xff0c;蹭了说唱热度&#xff0c;还请了被封杀网红当导师大家都知道&#xff0c;如今的综艺节目越来越多各种题材应有尽有&#xff0c;尤其是音乐类的…

计算机维修知识综述论文,机器学习领域各领域必读经典综述论文整理分享

原标题&#xff1a;机器学习领域各领域必读经典综述论文整理分享机器学习是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织…

计算机加一块硬盘,老电脑卡顿不一定没救了 加一块SSD就能焕发新生

【PConline 导购】我们经常遇到电脑卡顿的时候&#xff0c;有时不仅仅是网络的原因&#xff0c;其实&#xff0c;老电脑卡顿的根本原因在于&#xff0c;系统运行的程序超过硬件负荷而造成的。除了CPU显卡因素以外&#xff0c;硬盘读写性能慢也会导致电脑变卡顿。当感到电脑变慢…

维拉智能管家机器人_“女性机器人”广受欢迎,但却面临3大问题,男性坦言:不敢用...

服务型机器人是机器人当中技术难度最高的机器人&#xff0c;比起传统的工业机器人他们拥有高度的智慧&#xff0c;并且能够不断学习成长&#xff0c;我顾客提供最贴心的服务。服务型机器人中以类人型机器人最为受欢迎的&#xff0c;尤其是采用了硅胶制作的外貌的类人机器人&…

acdsee扫描没有图像_详解CT图像常见伪影成因及解决方法

CT 图像伪影 (artifact) 是指重建图像上与实际解剖结构不相符的密度异常变化。CT 图像比传统平扫X线更容易出现伪影&#xff0c;这是因为 CT 图像是由成千上万独立的原始测量数据重建而得&#xff0c;而计算机重建的一个假设性前提是这些原始数据是精确而稳定的&#xff0c;故任…

android 手机 熄屏 短信控制_华为手机音量键还隐藏着这8个实用功能,终于知道了...

阅读本文前&#xff0c;请您先点击上面的蓝色字体“生活妙招哩”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到内容了。每天都有分享。完全是免费订阅&#xff0c;请放心关注。说到手机音量键&#xff0c;大家第一个想到的功能当然就是调节音量了&#xff0…