load_guard
时间: 2025-05-27 18:10:15 浏览: 11
### C++ `std::lock_guard` 的定义与用法
`std::lock_guard` 是 C++11 中引入的一个类模板,位于头文件 `<mutex>` 中。它的主要作用是对互斥锁(`std::mutex` 或其他满足 Lockable 要求的对象)提供一种简单的范围锁定机制[^2]。
当创建一个 `std::lock_guard` 对象时,它会自动调用关联互斥锁的 `lock()` 方法;而当该对象超出其作用域被销毁时,则会自动调用互斥锁的 `unlock()` 方法。这种设计可以有效防止因忘记解锁而导致的死锁问题[^3]。
以下是 `std::lock_guard` 的基本语法和使用示例:
#### 基本语法
```cpp
std::lock_guard<std::mutex> lock(mutex_variable);
```
其中:
- `std::mutex` 是用于同步访问共享资源的一种互斥锁。
- `mutex_variable` 表示具体的互斥锁实例。
#### 使用示例
下面是一个典型的例子,展示如何利用 `std::lock_guard` 来保护临界区代码:
```cpp
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
std::mutex mtx;
int shared_resource = 0;
void increment() {
std::lock_guard<std::mutex> guard(mtx); // 自动加锁
++shared_resource;
}
int main() {
const int num_threads = 10;
std::vector<std::thread> threads;
for (int i = 0; i < num_threads; ++i) {
threads.emplace_back(increment);
}
for (auto& t : threads) {
t.join();
}
std::cout << "Final value of shared resource: " << shared_resource << '\n';
}
```
在这个程序中,多个线程尝试修改同一个全局变量 `shared_resource`。通过在每次进入 `increment` 函数时创建一个 `std::lock_guard` 实例来确保同一时间只有一个线程能够执行这段代码,从而避免数据竞争[^4]。
需要注意的是,尽管 `std::lock_guard` 提供了一种方便的方式管理单个互斥锁,但在更复杂的场景下可能需要考虑升级到 `std::unique_lock`,后者提供了更多的灵活性,比如延迟上锁、条件变量支持等功能[^5]。
阅读全文
相关推荐




















