c++代码中定义了一个全局变量, 该全局变量可能会被多线程访问以及修改,如何使用lock_guard进行加锁以及释放
时间: 2024-04-30 21:23:29 浏览: 220
C++多线程中的锁和条件变量使用教程
5星 · 资源好评率100%
锁?
可以使用std::lock_guard来保护全局变量。std::lock_guard是一个RAII类,它在构造函数中获取锁,在析构函数中释放锁。这样可以确保锁在任何情况下都会被正确释放,即使发生异常。
下面是一个使用std::lock_guard保护全局变量的示例:
```c++
#include <mutex>
std::mutex g_mutex;
int g_global_variable = 0;
void modify_global_variable()
{
std::lock_guard<std::mutex> lock(g_mutex);
g_global_variable++;
// 在这里g_mutex会自动释放
}
int read_global_variable()
{
std::lock_guard<std::mutex> lock(g_mutex);
return g_global_variable;
// 在这里g_mutex会自动释放
}
```
在上面的示例中,我们定义了一个全局变量g_global_variable和一个互斥量g_mutex。在modify_global_variable()函数中,我们使用std::lock_guard来获取锁,然后修改全局变量g_global_variable的值。在read_global_variable()函数中,我们使用std::lock_guard来获取锁,然后读取全局变量g_global_variable的值。
在使用std::lock_guard时,需要注意以下几点:
1. std::lock_guard不允许复制和移动,因此不能将它们作为函数参数传递。如果需要在多个函数之间共享锁,可以考虑使用std::shared_lock。
2. std::lock_guard只能用于互斥量。如果需要在多个线程之间共享其他资源,可以考虑使用std::unique_lock或std::shared_lock来进行保护。
阅读全文