在C++中,std::lock_guard
、std::unique_lock
和std::shared_lock
是用于管理互斥量的RAII类,确保锁的正确获取和释放(避免忘记释放锁导致的死锁问题)。以下是它们的详细介绍、区别及使用场景:
1. std::lock_guard
- 功能:最简单的锁管理器,构造时立即锁定互斥量,析构时自动释放。
- 特点:
- 不支持手动锁定或解锁。
- 不支持延迟锁定或条件变量。
- 不可复制或移动,仅限当前作用域使用。
- 适用场景:
- 保护临界区,无需中途解锁或额外灵活性。
- 示例:
std::mutex mtx; { std::lock_guard<std::mutex> lock(mtx); // 立即锁定 // 临界区操作 } // 自动解锁
2. std::unique_lock
- 功能:灵活的锁管理器,支持手动控制锁,适用于复杂场景。
- 特点:
- 可延迟锁定(
defer_lock
- 可延迟锁定(