c++中的lock_guard怎么使用
时间: 2023-09-27 17:08:39 浏览: 92
4. 互斥量、lock_guard与unique_lock1
lock_guard是C++标准库中的一个锁定守卫,用于自动锁定和解锁互斥量,以确保在其作用域内的一段时间内只有一个线程可以访问临界区。在C++11中,lock_guard是一个模板类,它需要一个互斥量类型作为参数。使用lock_guard的步骤如下:
1. 创建一个互斥量对象
```
std::mutex mtx;
```
2. 创建lock_guard对象,将互斥量对象传递给它
```
std::lock_guard<std::mutex> lock(mtx);
```
3. 在lock_guard对象的作用域中访问临界区。当lock_guard对象离开其作用域时,它会自动解锁互斥量
```
// 临界区代码
```
完整示例代码如下:
```
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print(int id) {
std::lock_guard<std::mutex> lock(mtx);
std::cout << "Thread " << id << " is printing" << std::endl;
}
int main() {
std::thread t1(print, 1);
std::thread t2(print, 2);
t1.join();
t2.join();
return 0;
}
```
在上面的代码中,创建了两个线程,它们会同时访问print()函数,但是由于在print()函数中使用了lock_guard,只有一个线程可以访问临界区,从而避免了数据竞争的问题。
阅读全文