CodeGym
AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • Busy-wait vs blocking

    C++ SELF
    等级 70,课时 0
    解析“忙等”( busy-wait/ polling,即“转圈等待”)与正常的阻塞等待之间的区别:为什么循环 while(! ready) 会对 CPU 和电池有害, sleep_for-polling 是怎样的折中,以及 std::condition_variable 与 wait(lock, predicate) 提供了怎样的等待模型。
    可用
  • std::condition_variable: wait(lock, predicate)

    C++ SELF
    等级 70,课时 1
    我们来讲解为什么在有 std::mutex 的情况下仍然需要 std::condition_variable,为什么我们“等待状态而不是信号”,以及如何正确地用 std::unique_lock 使用 wait(lock, predicate)。通过带有 ready 标志、任务队列和“令牌”的示例来巩固这个模式,讨论 notify_one()/ notify_all() 以及典型错误(裸的 wait(lock)、谓词中的副作用、在没有互斥量的情况下访问状态)。
    可用
  • Producer–consumer — 任务队列与工作线程

    C++ SELF
    等级 70,课时 2
    分析 C++ 中经典的 producer–consumer 模型:如何基于 std::queue 在 std::mutex 保护下组织任务队列,如何通过 std::condition_variable 和 wait(lock, predicate) 来“让 worker 睡眠”,为什么临界区的边界很重要(“取了任务就释放锁”),以及哪些错误最常破坏协议(忙等、在没有锁的情况下读取 empty()、丢失通知、引用已删除的元素)。
    可用
  • 伪唤醒 — 为什么需要 predicate

    C++ SELF
    等级 70,课时 3
    我们来分析为什么 std::condition_variable 可能在没有 notify_one()/ notify_all() 的情况下“醒来”,为什么 if + wait 是反模式,如何用 wait(lock, predicate)(或手动使用 while)避免 spurious wakeup 和 lost wakeup,以及如何实现带有“工作或关闭”协议的正确任务队列( TaskQueue::pop()/ close())。
    可用
  • Shutdown protocol — 如何停止 worker thread

    C++ SELF
    等级 70,课时 4
    解析在 C++ 中正确停止 worker thread 的协议:为什么在 std::condition_variable 上通过 cv.wait 等待可能会永远阻塞,如何添加状态 closed 并按谓词 closed || ! q.empty() 正确等待,为什么在 shutdown 时几乎总是需要 notify_all(),以及如何实现可读的 pop(),返回 std::optional<T> / std::nullopt,以便 worker 循环能够诚实地结束且不丢失任务。
    可用
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym