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

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • 临界区 — 我们保护什么以及在哪里保护

    C++ SELF
    等级 69,课时 0
    解析如何在多线程 C++ 中找到临界区的边界:先确定共享资源及其不变量,然后再考虑锁(例如 std::mutex)。通过示例展示为什么 ++ 不是“一个操作”,为什么读取( size()、 empty()、 average())也参与竞争,以及如何在 TaskStats 组件中协调保护相关状态( push_back + +=)。
    可用
  • std::mutex + std::lock_guard — RAII 锁定

    C++ SELF
    等级 69,课时 1
    解析 C++ 中的基本同步:为什么需要 std::mutex,为什么手动的 lock()/ unlock() 容易导致“永远”锁住,以及通过 std::lock_guard 的 RAII 方法如何将互斥量的释放绑定到作用域。演示如何正确限制临界区,保护共享计数器甚至 std::cout 的输出,并分析在使用锁时的常见错误。
    可用
  • std::unique_lock 和 std::scoped_lock — 什么时候需要

    C++ SELF
    等级 69,课时 2
    解析为什么在多线程 C++ 中有时单纯使用 std::lock_guard 不够: std::unique_lock 如何帮助精确控制互斥量的持有时间(提前 unlock()、再次 lock()、通过 std::defer_lock 延迟获取),以及 std::scoped_lock 如何以一个逻辑操作安全地一次性拿住多个互斥量(例如在账户间转账时)。另外 — 实战模式 “snapshot → compute → commit”、一个简要的选择表和典型错误。
    可用
  • 死锁:原因与预防原则

    C++ SELF
    等级 69,课时 3
    我们来讲解在多线程 C++ 中什么是互相阻塞( deadlock):它如何因为不同的 std::mutex 获取顺序而产生,为什么通过无限的 join() 表现为程序“挂起”,以及如何通过锁纪律来预防问题——采用统一的 lock ordering 或使用一次性原子获取多个互斥量的方式(例如 std::scoped_lock)。另外还讨论在持锁期间做副作用(例如日志记录)的风险,以及“在锁下快照 → 解锁后处理”的实践。
    可用
  • 封装同步: “mutex 在类内部”

    C++ SELF
    等级 69,课时 4
    我们讲解“将互斥锁放在类内部”的实践:为什么外部的 std::mutex 几乎不可避免地导致忘记加锁和数据竞争,如何通过 std::lock_guard 构建自我约束的接口,为什么在 const 方法中可能需要 mutable,以及如何通过 snapshot() 安全地读取数据。以线程安全的 TaskLog 为例,展示如何设计复合操作( add_and_size())以及应避免的错误(对容器的引用泄露、不同步的读取、过长时间持有 lock、多个互斥量时的 deadlock 风险)。
    可用
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