std::lock_guard<std::mutex>
时间: 2024-01-22 21:04:28 浏览: 280
`std::lock_guard<std::mutex>`是C++中的一个RAII(资源获取即初始化)类,用于自动管理互斥锁的加锁和解锁操作。它在构造函数中获取互斥锁的所有权,并在析构函数中释放互斥锁的所有权。这样可以确保在任何情况下,即使发生异常,互斥锁也会被正确地释放。
下面是一个使用`std::lock_guard<std::mutex>`的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
void print_block(int n, char c){
std::lock_guard<std::mutex> lock(mtx); // 使用std::lock_guard获取互斥锁的所有权
for(int i=0; i<n; ++i){
std::cout << c;
}
std::cout << '\n';
}
int main(){
std::thread th1(print_block, 500,'*');
std::thread th2(print_block, 500,'$');
th1.join();
th2.join();
return 0;
}
```
在上面的示例中,`std::lock_guard<std::mutex>`被用来保护`print_block`函数中的临界区代码,确保同时只有一个线程可以访问临界区。这样可以避免多个线程同时访问共享资源而导致的数据竞争问题。
阅读全文