课堂答疑(二)|C 工程实战篇问题集锦
于航
该思维导图由 AI 生成,仅供参考
你好,我是于航。
在这门课的第三个模块“C 工程实战篇”中,我带你学习了在大型工程实战中应用 C 语言时需要掌握的很多必备技巧。而这次的答疑加餐,我从这个模块的课后思考题中精选了同学们讨论比较多,也比较有代表性的三个问题,来对它们进行详细分析。接下来,就请跟随我的脚步,一起来看看吧。
问题一
在下面的代码中,为什么我们要在 while 语句,而不是 if 语句中使用 cnd_wait 呢?
对于这个问题,评论区的一些同学给出了不错的回答。比如 @liu_liu 同学就指出了其中的一个原因:
当阻塞的线程被重新调度运行时,done 的值可能被改变了,不是预期值。
还有 @ZR2021 同学也提到了与此相关的另一个重要因素:
使用 while 是防止广播通知方式的虚假唤醒,需要用户进一步判断。
这里,我就在同学们的回答基础上,对这个问题做一个总结。
首先需要知道的是,使用 while 或 if 语句的主要目的,在于判断线程是否满足“可以进入阻塞状态”的基本条件。比如,在上述代码中,当全局变量 done 的值为 0 时,表明当前线程需要优先等待其他线程完成某项任务后,才能够继续执行。但在现实情况中,“等待线程”的执行恢复往往会在各种非正常情况下发生。通常来说,这些情况可以被总结为三类。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了C语言在大型工程实战中的应用技巧,主要涉及了使用条件变量时的注意事项以及高速缓存抖动的问题。首先,文章详细讨论了使用条件变量时应该使用while语句而不是if语句的重要性,通过分析虚假唤醒情况强调了while循环重新对条件变量进行检查的必要性。其次,文章深入探讨了高速缓存抖动的概念及其发生的原因,通过具体的代码示例阐述了交替访问数组元素可能导致高速缓存抖动的问题,从而影响程序的运行效率。此外,文章还介绍了达夫设备(Duff’s Device)的概念及其实现原理,通过结合使用switch语句与do-while语句,达夫设备可以减少不直接有助于程序结果的操作数量,提升性能。总的来说,本文通过解答同学们在C工程实战中遇到的问题,深入剖析了C语言应用中的关键技巧和注意事项,为读者提供了宝贵的实战经验和技术指导。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入 C 语言和程序运行原理》,新⼈⾸单¥59
《深入 C 语言和程序运行原理》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- ALPHA老师好,问一哈c语言有类似于协程的特性吗
作者回复: C 语言本身没有协程哈,一般都是用 setjmp 和 longjmp 来模拟协程的特殊运行方式。
2022-02-232 - Ping多谢老师
作者回复: 不客气哈!
2022-02-212 - ZR20216662022-02-21
收起评论