准线程安全:map中原素个数改变才加锁,适合读频繁,写不频繁的情况;
#include"mutex"
#include"unordered_map"
template<typename K,typename V>
class dict_safe_base
{
private:
std::unordered_map<K,V> _map;
std::mutex _mutex;
public:
dict_safe_base()
{
}
std::vector<V> visit(std::function<std::vector<V>(const std::unordered_map<K,V>&)> visitor_fun)
{
std::lock_guard<std::mutex> lock(_mutex);
return visitor_fun(_map);
}
V get(K& k)
{
std::lock_guard<std::mutex> lock(_mutex);
auto serch = _map.find(k);
return (_map.end()!=serch) ? serch->second : nullptr;
}
void add(K& k, V& v)
{
std::lock_guard<std::mutex> lock(_mutex);
_map.insert({k,v});
}
void add(const std::unordered_map<K,V>& m)
{
std::lock_guard<std::mutex> lock(_mutex);
_map.insert(m.begin(), m.end());
}
void add_replace(K& k, V& v)
{
std::lock_guard<std::mutex&