深入 C 语言和程序运行原理
于航
PayPal 技术专家
21121 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
深入 C 语言和程序运行原理
15
15
1.0x
00:00/00:00
登录|注册

课堂答疑(二)|C 工程实战篇问题集锦

编译器优化通常足够
达夫设备不如 memcpy 高效
减少循环开销
结合 switch 和 do-while
由 Tom Duff 发现
手动循环展开优化
缓存策略优化
调整数组布局
交替访问数组元素
直接映射高速缓存
影响程序运行效率
缓存行反复加载和驱逐
竞态条件下的唤醒
多处理器核心下的唤醒
操作系统特性导致唤醒
保证条件再次检查
防止虚假唤醒
课程反馈与建议
进一步问题探讨
评论区交流
达夫设备与 memcpy
达夫设备示例
达夫设备实现
达夫设备概念
解决方法
缓存抖动示例
高速缓存抖动定义
示例代码
虚假唤醒情况
条件变量使用 while 而非 if
课程讨论
问题三: 达夫设备
问题二: 高速缓存抖动
问题一: 使用条件变量
C 工程实战篇问题集锦

该思维导图由 AI 生成,仅供参考

你好,我是于航。
在这门课的第三个模块“C 工程实战篇”中,我带你学习了在大型工程实战中应用 C 语言时需要掌握的很多必备技巧。而这次的答疑加餐,我从这个模块的课后思考题中精选了同学们讨论比较多,也比较有代表性的三个问题,来对它们进行详细分析。接下来,就请跟随我的脚步,一起来看看吧。

问题一

我在 14 讲 的“使用条件变量”一节中为你留下了这样一个问题:
在下面的代码中,为什么我们要在 while 语句,而不是 if 语句中使用 cnd_wait 呢?
// ...
while (done == 0) {
cnd_wait(&cond, &mutex);
}
// ...
对于这个问题,评论区的一些同学给出了不错的回答。比如 @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
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • ALPHA
    老师好,问一哈c语言有类似于协程的特性吗

    作者回复: C 语言本身没有协程哈,一般都是用 setjmp 和 longjmp 来模拟协程的特殊运行方式。

    2022-02-23
    2
  • Ping
    多谢老师

    作者回复: 不客气哈!

    2022-02-21
    2
  • ZR2021
    666
    2022-02-21
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部