C++ 线程基础:std::thread、join/detach 与传参陷阱
std::thread 的创建方式、join 与 detach 的语义、传参陷阱与常见坑。同步机制(互斥锁、条件变量、原子操作)见另一篇并发笔记。 核心概念速查 概念 说明 关键点 进程 独立运行的程序实例 有独立内存空间 线程 进程内的执行单元 共享进程内存 std::thread C++11 线程库 #include <thread> join 等待线程结束 阻塞当前线程 detach 分离线程 后台运行,不再可 join 进程 vs 线程 维度 进程 线程 内存空间 独立 共享 通信 管道/队列/文件 直接共享变量(需同步) 切换开销 大 小 创建开销 大 小 崩溃影响 只影响自身 可能带崩整个进程 适用场景 隔离、分布式 高并发、I/O 密集 创建线程 #include <iostream> #include <thread> void hello() { std::cout << "Hello from thread\n"; } int main() { // 方式1: 无参函数 std::thread t1(hello); // 方式2: lambda std::thread t2([]{ std::cout << "Hello from lambda\n"; }); // 方式3: 带参函数 auto print_num = [](int n) { std::cout << "Number: " << n << "\n"; }; std::thread t3(print_num, 42); t1.join(); t2.join(); t3.join(); return 0; } join 与 detach 操作 行为 何时用 join() 等待线程结束才继续 需要线程结果时 detach() 立即返回,线程后台跑 结果不关心时(慎用) 陷阱:线程要么 join 要么 detach,都不做 → 析构时 std::terminate() 崩溃。detach 的线程访问已销毁的对象 → 未定义行为。 ...
豫公网安备41108202000982号