std::mutex 使用介绍
时间: 2024-10-29 08:05:19 浏览: 18
C++11 并发指南之std::mutex详解
`std::mutex` 是 C++11 引入的一种同步原语,用于控制线程间的并发访问。它主要用于保护共享资源,防止多线程同时修改导致的数据不一致。下面是对 `std::mutex` 的基本使用介绍:
1. **创建和使用**:
```cpp
std::mutex mtx; // 创建一个互斥锁
```
当需要保护某个部分的代码不被其他线程并发执行时,可以在代码块开始处锁定(acquire)互斥锁:
```cpp
mtx.lock(); // 锁定互斥锁
// 这里是受保护的代码...
mtx.unlock(); // 释放互斥锁
```
2. **异常安全**:
`std::lock_guard` 是一个智能指针,自动管理互斥锁的生命周期,使其在构造时锁定并在析构时解锁,这样即使在代码块内部抛出异常也能保证锁会被正确地释放。
```cpp
std::lock_guard<std::mutex> lock(mtx);
// 这里是受保护的代码...
```
3. **条件变量配合**:
可以与 `std::condition_variable` 结合使用,实现更复杂的同步机制,如等待/唤醒操作。
```cpp
std::condition_variable cv;
// ...
cv.wait(lock); // 线程进入等待状态,直到cv.notify_one()被调用
```
4. **注意点**:
- 多个线程同时尝试获取同一个 `std::mutex` 会阻塞,直到该锁被释放。
- 对于读取多写少的情况,可以考虑使用 `std::read_write_lock` 或 `std::unique_lock<>::try_lock()` 来提高性能。
阅读全文