std::map 读写锁
时间: 2023-09-13 17:08:31 浏览: 308
std::map 是 C++ STL 中的一个关联容器,它提供了一种将键值与值相关联的方式。当多个线程同时访问 std::map 时,为了保证数据的正确性,需要使用读写锁进行保护。
读写锁是一种特殊的锁,它允许多个线程同时读取共享资源,但只允许一个线程进行写入操作。在 std::map 中,读操作包括查找元素和读取元素值,写操作包括插入、修改和删除元素。
在 C++11 中,可以使用 std::shared_mutex 类来实现读写锁。其中,std::shared_lock 用于读取共享资源,std::unique_lock 用于写入共享资源。
下面是一个使用 std::shared_mutex 来保护 std::map 的示例代码:
```c++
#include <map>
#include <shared_mutex>
std::map<int, int> my_map;
std::shared_mutex my_mutex;
void read_map(int key)
{
std::shared_lock<std::shared_mutex> lock(my_mutex);
auto it = my_map.find(key);
if (it != my_map.end())
{
int value = it->second;
// 读取元素值
}
// 释放锁
}
void write_map(int key, int value)
{
std::unique_lock<std::shared_mutex> lock(my_mutex);
my_map[key] = value;
// 释放锁
}
```
在上面的代码中,read_map() 函数使用 std::shared_lock 对 my_mutex 上锁,以读取 my_map 中指定键的元素值。write_map() 函数使用 std::unique_lock 对 my_mutex 上锁,以修改 my_map 中指定键的元素值。
需要注意的是,在使用 std::shared_mutex 时,写锁对读锁是互斥的,即写锁会阻塞所有读锁和写锁。因此,在使用 std::shared_mutex 时需要注意避免死锁的情况。
阅读全文