C++锁
lock_guard 和 unique_lock
std::lock_guard 和 std::unique_lock 都是用于管理互斥锁的 C++11 标准库类,它们的主要区别在于锁的管理方式和灵活性。
锁的管理方式
std::lock_guard 是一种简单的锁管理器,它的作用是在构造函数中自动锁定互斥锁对象,并在析构函数中自动释放锁。由于 std::lock_guard 的锁定和释放是在构造函数和析构函数中完成的,因此它遵循 RAII 设计模式,可以避免在代码中手动管理锁的生命周期。
std::unique_lock 也是一种锁管理器,但相比 std::lock_guard,它提供了更加灵活的锁定和释放方式。std::unique_lock 的构造函数可以接受一个 std::defer_lock 参数,用于创建一个未锁定的 std::unique_lock 对象,而锁定操作则需要手动调用 lock() 方法来完成。此外,std::unique_lock 还提供了一些其他的特性,例如:
- 可以在构造函数中传入一个 std::adopt_lock_t 参数,用于接管已经锁定的互斥锁对象的所有权。
- 可以随时手动释放锁,并在需要时重新获取锁。