std::thread 基本用法
std::thread 是C++标准线程库,用于启动一个新线程执行函数 / 任务
核心知识点
1.创建线程: 直接构造std::thread 对象,传入要执行的函数 + 参数
2.等待线程结束:join() -----主线程阻塞,等待子线程完成
3.分离线程: detach() ————子线程后台运行,与主线程脱离
4.线程对象必须join() 或者detach(), 否则程序崩溃
例子1:基础线程创建 + join
例子2:Lambda 表达式创建线程
std::lock_guard 基本用法
std::lock_guard 是RAII风格的锁管理器,专门配合std::mutex(互斥锁)使用。
核心作用
- 自动加锁:创建时自动上锁
- 自动解锁:离开作用域时自动解锁
- 绝对不会忘记解锁,从根源避免死锁
核心知识点
1.必须搭配 std::mutex使用
2.作用域结束 -> 自动解锁
3.不能手动解锁/加锁(安全性更高)
例子:多线程共享数据 + lock_guard保护
场景:两个线程同时修改一个全局变量,不加锁会导致数据混乱。
对比
1.std::thread 必须记住的动作
- 创建 : std::thread t(函数,参数...)
- 等待 : t.join()
- 分离 : t.detach()
2.std::lock_guard必须记住的2个特点
- 自动加锁,自动解锁
- 配合std::mutex 保护多线程共享数据
总结
1.thread: 创建线程,join()等待线程结束
2.mutex: 互斥锁,保护共享数据
3.lock_guard : 自动管理锁,安全不会泄漏
4.多线程修改共享变量 ---> 必须要加锁