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

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • Data race 与 UB:通向竞态模型的简要过渡

    C++ SELF
    等级 72,课时 0
    我们来分析,为什么在 C++ 中,数据竞争( data race)不是“有时结果不对”,而是形式上的 Undefined Behavior:编译器和 CPU 因此获得了重排操作的权利。我们会区分逻辑竞态( race condition)与数据竞争,分析诸如“ join() 会修好一切”和“ sleep_for 会有帮助”之类的典型陷阱,并展示两种基础修复方式: std::mutex 和 std::atomic。最后,我们会给出一套诊断心智图和常见错误清单。
    可用
  • 操作 std::atomic: load/ store/ exchange/ fetch_*

    C++ SELF
    等级 72,课时 1
    整理 std::atomic 在 C++ 中的基础操作“词典”:原子性的读/写 通过 load() 和 store(),RMW(读-改-写)操作系列 fetch_add()/ fetch_sub() 及按位操作 fetch_and()/ fetch_or()/ fetch_xor(),通过 exchange() 的“替换并返回”,以及通过 compare_exchange_weak/ compare_exchange_strong 的条件更新(CAS)。解析常见模式(ticket、状态机、原子性 max)、mermaid 图示以及导致丢失更新和罕见 bug 的常见错误。
    可用
  • std::memory_order: seq_cst 默认

    C++ SELF
    等级 72,课时 2
    讲解为什么在 std::atomic 中存在 std::memory_order:原子性与有序性有何区别,为什么默认在 load()/ store()/ fetch_add() 中使用 std::memory_order::seq_cst,在哪些场景下适合使用 std::memory_order::relaxed(指标和计数器),以及哪些典型错误会导致多线程代码中罕见且难以捕获的 bug。
    可用
  • Acquire/Release:线程间的数据发布

    C++ SELF
    等级 72,课时 3
    我们解析 C++ 内存模型中的数据发布协议:如何通过 std::memory_order_release(发布)与 std::memory_order_acquire(获取)配合,保证线程间已准备数据的可见性。展示了最小化的 producer/consumer 模板、关键不变式(何时正确、何时会出现 data race)、与 relaxed/ seq_cst 的比较,以及一个使用 memory_order_acq_rel 的读-改-写 示例。
    可用
  • wait/notify 基于原子操作与 std::atomic_flag

    C++ SELF
    等级 72,课时 4
    解析在 C++20/23 中如何在不燃烧 CPU 的情况下等待原子值的变化:为什么 std::atomic<T>::wait() 比 spin-wait 更好,如何正确地将 wait() 与 notify_one()/ notify_all() 结合使用,为什么等待几乎总是通过 while 来实现,以及如何通过 memory_order_release/ memory_order_acquire 发布数据。单独查看极简标志 std::atomic_flag 和“只做一次”模式。
    可用
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