写一个关于lock_guard的例子并讲解
时间: 2023-04-03 18:02:41 浏览: 60
好的,关于lock_guard的例子,我们可以考虑一个多线程环境下的资源竞争问题。假设我们有一个共享变量count,多个线程需要对它进行读写操作,为了避免竞争,我们可以使用lock_guard来保护这个变量。
具体实现如下:
```
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 定义一个互斥锁
int count = 0; // 共享变量
void increment() {
std::lock_guard<std::mutex> lock(mtx); // 创建一个lock_guard对象,自动加锁,离开作用域时自动解锁
++count; // 对共享变量进行操作
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "count = " << count << std::endl; // 输出共享变量的值
return 0;
}
```
在这个例子中,我们定义了一个互斥锁mtx,然后在increment函数中使用lock_guard来保护共享变量count。当一个线程进入increment函数时,lock_guard会自动加锁,离开作用域时自动解锁,从而保证了多个线程对count的操作不会发生竞争。
需要注意的是,lock_guard只是一个RAII风格的封装,它并不能解决所有的多线程问题,比如死锁等问题。在实际使用中,我们需要根据具体情况选择合适的同步机制来保护共享资源。