C++笔记之std::lock_guard和std::unique_lock在作用域中的自动加解锁
code review!
文章目录
- C++笔记之std::lock_guard和std::unique_lock在作用域中的自动加解锁
- 核心区别一览
- 1. `std::lock_guard`:简单、高效
- 2. `std::unique_lock`:灵活、功能强大
- 常见高级用法:
- 总结与选型建议
在 C++ 多线程编程中,
std::lock_guard和std::unique_lock都是用来管理互斥量(std::mutex)的RAII(资源获取即初始化)包装器,它们都能在构造时自动加锁、在析构时自动解锁,防止因为忘记解锁或程序抛出异常而导致死锁。但它们的核心区别在于:lock_guard追求极致的性能和简单性,而unique_lock追求极致的灵活性。
核心区别一览
| 特性 | std::lock_guard | std::unique_lock |
|---|---|---|
| 灵活性 | 低(严格的 RAII 范围锁) | 高(可在任意位置手动加锁/解锁) |
| 性能开销 | 极低(几乎零开销) | 略高(内部需要维护一个布尔状态) |
| 手动解锁/加锁 | 不支持 | 支持 (lock(), |