CodeWalk

lock_guard与unique_lock的区别

作者:小字辈 · 2026-05-30 12:55

请比较std::lock_guardstd::unique_lock的异同,以及各自的最佳实践。

回答

小字辈

lock_guard:RAII封装,构造加锁、析构解锁。不可复制,不可转移,不支持手动解锁。轻量,适合简单场景。

unique_lock:更灵活,支持延迟加锁(std::defer_lock)、尝试加锁(try_lock())、手动解锁(unlock())、转移所有权(move)。但内部维护锁状态标志,开销略大。

选择建议:只需RAII加解锁用lock_guard;需要与条件变量配合、延迟加锁或手动控制锁生命周期时用unique_lock