(六)std::thread 和 std::lock_guard 用法详解

0 阅读1分钟

std::thread 基本用法

std::thread 是C++标准线程库,用于启动一个新线程执行函数 / 任务

核心知识点

1.创建线程: 直接构造std::thread 对象,传入要执行的函数 + 参数

2.等待线程结束:join() -----主线程阻塞,等待子线程完成

3.分离线程: detach() ————子线程后台运行,与主线程脱离

4.线程对象必须join() 或者detach(), 否则程序崩溃

例子1:基础线程创建 + join

image.png

例子2:Lambda 表达式创建线程

image.png

std::lock_guard 基本用法

std::lock_guard 是RAII风格的锁管理器,专门配合std::mutex(互斥锁)使用。

核心作用

  • 自动加锁:创建时自动上锁
  • 自动解锁:离开作用域时自动解锁
  • 绝对不会忘记解锁,从根源避免死锁

核心知识点

1.必须搭配 std::mutex使用

2.作用域结束 -> 自动解锁

3.不能手动解锁/加锁(安全性更高)

例子:多线程共享数据 + lock_guard保护

场景:两个线程同时修改一个全局变量,不加锁会导致数据混乱。

image.png

对比

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.多线程修改共享变量 ---> 必须要加锁