背景:多线程访问同一资源时,为了保证数据的一致性,必要时需要加锁。
一、lock_guard 通常用来管理一个 std::mutex 类型的对象,通过定义一个 lock_guard 一个对象来管理 std::mutex 的上锁和解锁。在 lock_guard 初始化的时候进行上锁,然后在 lock_guard 析构的时候进行解锁。这样避免了我们对 std::mutex 的上锁和解锁的管理。
二、C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为
三、区别
- std::lock_guard:方便线程对互斥量上锁。
-
std::unique_lock:方便线程对互斥量上锁,但提供了更好的上锁和解锁控制(比如可以结合条件变量使用),同时,效率上差一点,内存占用多一点。。
四、例子
std::mutex m_mutex;
bool Graph::lockNode() {
lock_guard<mutex> lock(m_mutex);
...;