线程安全map

#include “controller.h”
#include
#include
#include <condition_variable>
#include “ctrlindex.h”

template<class Key, class T>
class ThreadSaftMap
{
private:
std::map<Key, T> m_map;
mutable std::mutex m_mutex;
std::condition_variable m_conditionVariable;
public:
void insert(const Key &inputKey, const T &inputValue) {
std::unique_lockstd::mutex lock(m_mutex);
m_map.insert(std::pair<Key, T>(inputKey, inputValue));
lock.unlock();
m_conditionVariable.notify_all();
}

bool empty() const {
    std::unique_lock<std::mutex> lock(m_mutex);
    return m_map.empty();
}

bool try_get(const Key &inputKey, T &outputValue) {
     std::unique_lock<std::mutex> lock(m_mutex);

    typename std::map<Key, T>::iterator it;
    it = m_map.find(inputKey);

    if(m_map.end() == it) {
        return false;
    }

    outputValue = it->second;
    return true;
}

void wait_and_get(const Key &inputKey, T &outputValue) {
     std::unique_lock<std::mutex> lock(m_mutex);

    typename std::map<Key, T>::iterator it;

    while(m_map.end() == (it = m_map.find(inputKey)))
    {
        m_conditionVariable.wait(lock);
    }

    outputValue = it->second;
}

void wait_next_insert() {
     std::unique_lock<std::mutex> lock(m_mutex);
    m_conditionVariable.wait(lock);
}

void erase(const Key &inputKey) {
     std::unique_lock<std::mutex> lock(m_mutex);
    m_map.erase(inputKey);
}

size_t size() const {
     std::unique_lock<std::mutex> lock(m_mutex);
    return m_map.size();
}

};

ThreadSaftMap<std::string, Controller*> m_Url;

void vSetUrlController();

template
void vAddUrlController(const std::string& url);

void Server::vSetUrlController()
{
std::string strPath = “/”;
vAddUrlController(strPath);
}

template
void Server::vAddUrlController(const std::string& url)
{
// std::string strPath = “/”;

m_Url.insert(url,new CONTROLLER);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值