C++多线程学习需聚焦生命周期、数据竞争与锁安全三核心:必须检查join/detach、演示竞态错误、对比lock_guard与手动锁;优选含具体组件名、有joinable检查和条件变量谓词的B站视频。
std::thread 是 C++11 起官方支持的多线程核心工具,**不需要视频也能快速上手**——但如果你习惯看视频学,得避开“只讲 API 不讲生命周期”“用 detach() 演示却不提资源泄漏风险”的低质量内容。
真正能帮你写出安全、可维护代码的视频,必须覆盖以下三点,缺一不可:
std::thread 析构前是否调用了 join() 或 detach(),并明确解释不做的后果(程序直接终止)int counter,不加锁时结果为何总是错的std::lock_guard 和手动 mtx.lock()/mtx.unlock(),强调异常发生时前者自动解锁,后者大概率死锁国内平台中,Bilibili 上搜索「C++11 thread 实战」比搜「多线程教程」更有效。优先找满足以下条件的视频:
std::mutex」「std::condition_variable」等具体组件名,而非泛泛而谈「并发编程」join() 报错 terminate called without an active exception?」,UP 主给出了 joinable() 检查逻辑
cv.wait(lock, []{ return !queue.empty(); }) 而不是 while 循环 + sleepstd::thread 接口一致,但底层调度和错误表现不同:
std::thread 基于 pthread,hardware_concurrency() 返回值通常接近 CPU 核心数;Windows 下可能略高(包含超线程)std::thread 的支持比 WinDbg 更成熟,尤其在线程局部存储(TLS)和栈回溯上光看不写等于没学。打开编辑器,5 分钟内完成以下检查:
std::ref(x) 修改外部变量,再传普通参数 y,观察输出确认值传递 vs 引用传递区别
t.join(),编译运行,看是否触发 std::terminate —— 这是你理解生命周期的临界点std::vector<:thread> 启动 4 个线程,每个执行 std::this_thread::sleep_for(100ms),测总耗时是否接近 100ms(而非 400ms)