CARLA
 
载入中...
搜索中...
未找到
AtomicMap.h
浏览该文件的文档.
1// Copyright (c) 2020 Computer Vision Center (CVC) at the Universitat Autonoma
2// de Barcelona (UAB).
3//
4// This work is licensed under the terms of the MIT license.
5// For a copy, see <https://opensource.org/licenses/MIT>.
6
7#pragma once
8
9#include <mutex>
10#include <unordered_map>
11/**
12 * @namespace carla::traffic_manager
13 *
14 * @brief Carla项目的交通管理命名空间。
15 */
16namespace carla {
17namespace traffic_manager {
18 /**
19 * @class AtomicMap
20 * @brief 一个线程安全的、基于unordered_map的原子映射类。
21 *
22 * 这个模板类提供了一个线程安全的映射,使用mutex来确保对内部unordered_map的并发访问是安全的。
23 *
24 * @tparam Key 映射的键类型。
25 * @tparam Value 映射的值类型。
26 */
27 template <typename Key, typename Value>
28 class AtomicMap {
29
30 private:
31 /**
32 * @brief 用于同步对map的访问的可变互斥锁。
33 *
34 * 这个互斥锁用于保护对内部unordered_map的并发访问,确保线程安全。
35 */
36 mutable std::mutex map_mutex;
37 /**
38 * @brief 存储键值对的无序映射。
39 */
40 std::unordered_map<Key, Value> map;
41
42 public:
43 /**
44 * @brief 默认构造函数。
45 */
47 /**
48 * @brief 添加或更新键值对。
49 *
50 * 如果键已存在,则更新其对应的值;如果键不存在,则插入新的键值对。
51 *
52 * @param entry 要添加或更新的键值对。
53 */
54 void AddEntry(const std::pair<Key, Value> &entry) {
55
56 std::lock_guard<std::mutex> lock(map_mutex);// 加锁以保护对map的访问
57 const Key& key = entry.first;
58 if (map.find(key) != map.end()) {
59 map.at(key) = entry.second;// 更新已存在的键的值
60 } else {
61 map.insert(entry);// 插入新的键值对
62 }
63 }
64 /**
65 * @brief 检查映射是否包含指定的键。
66 *
67 * @param key 要检查的键。
68 * @return 如果映射包含指定的键,则返回true;否则返回false。
69 */
70 bool Contains(const Key &key) const {
71
72 std::lock_guard<std::mutex> lock(map_mutex);// 加锁以保护对map的访问
73 return map.find(key) != map.end();// 检查键是否存在
74 }
75 /**
76 * @brief 获取指定键的值。
77 *
78 * @param key 要获取值的键。
79 * @return 指定键对应的值。如果键不存在,则行为未定义(通常会导致抛出异常)。
80 */
81 const Value &GetValue(const Key &key) const {
82
83 std::lock_guard<std::mutex> lock(map_mutex);// 加锁以保护对map的访问
84 return map.at(key);// 返回指定键的值
85 }
86 /**
87 * @brief 从映射中移除指定的键及其对应的值。
88 *
89 * @param key 要移除的键。
90 */
91 void RemoveEntry(const Key &key) {
92
93 std::lock_guard<std::mutex> lock(map_mutex);// 加锁以保护对map的访问
94 map.erase(key);// 移除指定的键及其对应的值
95 }
96
97 };
98
99} // namespace traffic_manager
100} // namespace carla
一个线程安全的、基于unordered_map的原子映射类。
Definition AtomicMap.h:28
std::unordered_map< Key, Value > map
存储键值对的无序映射。
Definition AtomicMap.h:40
void RemoveEntry(const Key &key)
从映射中移除指定的键及其对应的值。
Definition AtomicMap.h:91
const Value & GetValue(const Key &key) const
获取指定键的值。
Definition AtomicMap.h:81
bool Contains(const Key &key) const
检查映射是否包含指定的键。
Definition AtomicMap.h:70
AtomicMap()
默认构造函数。
Definition AtomicMap.h:46
void AddEntry(const std::pair< Key, Value > &entry)
添加或更新键值对。
Definition AtomicMap.h:54
std::mutex map_mutex
用于同步对map的访问的可变互斥锁。
Definition AtomicMap.h:36
CARLA模拟器的主命名空间。
Definition Carla.cpp:139