C++中mutex如何使用
时间: 2024-09-10 18:25:56 浏览: 37
c++11互斥库mutex的使用
在C++中,`std::mutex`用于同步访问共享资源,防止多线程并发时的数据竞争。以下是基本的使用示例:
1. 创建互斥量:
```cpp
#include <mutex>
std::mutex mtx; // 创建一个基本的互斥量
```
2. 上锁:
```cpp
// 在进入临界区(需要保护的部分)之前上锁
std::unique_lock<std::mutex> lock(mtx); // 使用unique_lock自动解锁
// 现在其他线程无法进入此临界区,直到锁被释放
```
3. 下锁:
```cpp
// 当完成对共享资源的操作后,手动或自动解锁
lock.unlock(); // 释放锁
```
4. 错误处理:
```cpp
// 尝试性获取锁(失败会立即返回)
if (not lock.try_lock()) {
// 锁已被其他线程持有,处理冲突
}
```
5. 多个互斥量的同步:
```cpp
std::vector<std::mutex> mutexes; // 存储多个互斥量
for (auto& m : mutexes) {
std::lock_guard<std::mutex> guard(m);
// 操作共享资源
}
```
6. 避免循环等待(递归锁):
```cpp
std::recursive_mutex rm; // 使用递归锁
lock_guard<std::recursive_mutex> lock(rm, std::defer_lock);
lock.lock();
```
7. 一次性执行操作:
```cpp
std::call_once(init_function, []{}); // 只执行init_function一次
```
阅读全文