lockguard 如何加锁释放琐
时间: 2024-09-06 13:04:23 浏览: 13
`lock_guard`是C++标准库中定义的一个RAII(资源获取即初始化)风格的互斥锁类。它在构造函数中自动加锁,在析构函数中自动解锁,从而保证了即使发生异常,锁也能被正确释放。使用`lock_guard`可以简化互斥锁的管理,减少手动加锁和解锁的复杂性和出错的可能性。
下面是一个简单的使用`lock_guard`进行加锁和解锁的示例:
```cpp
#include <mutex>
#include <iostream>
std::mutex mtx; // 定义一个互斥锁
void print_even(int x) {
std::lock_guard<std::mutex> lock(mtx); // 构造函数中自动加锁
// 临界区代码
std::cout << x << " is even\n";
}
void print_odd(int x) {
std::lock_guard<std::mutex> lock(mtx); // 构造函数中自动加锁
// 临界区代码
std::cout << x << " is odd\n";
}
int main() {
std::thread t1(print_even, 2); // 创建并启动线程t1
std::thread t2(print_odd, 3); // 创建并启动线程t2
t1.join();
t2.join();
return 0;
}
```
在上面的代码中,`lock_guard`对象`lock`在创建时会自动调用`std::mutex`的`lock()`方法进行加锁,在其生命周期结束时(当`lock_guard`对象离开作用域时),会自动调用`unlock()`方法进行解锁。