线程安全的的map-CSuperMap
来源:互联网 发布:c语言字母小写转换大写 编辑:程序博客网 时间:2024/05/16 15:44
=====================================SuperMap.h============================
#ifndef _SUPER_MAP_H
#define _SUPER_MAP_H
#include "mutex.h"
#include <map>
using namespace std;
template <class CKey,class CValue,class TYPE>
class CSuperMap
{
public:
inline void Insert(CKey key,CValue* value)
{
CAutoMutex automutex(&m_mutexmap);
m_map.insert(make_pair(key,value));
}
inline void Delete(CKey key,bool bDelObj=true)
{
CAutoMutex automutex(&m_mutexmap);
typename TYPE::iterator it;
it = m_map.find(key);
if (it != m_map.end())
{
if (bDelObj)
delete it->second;//free obj memory
m_map.erase(it); //delete item from map
}
}
inline void Clear()
{
CAutoMutex automutex(&m_mutexmap);
m_map.clear();
}
inline int Size()
{
return m_map.size();
}
inline CValue* Find(CKey key,bool bLock=false)
{
typename TYPE::iterator it;
if (bLock)
{
CAutoMutex automutex(&m_mutexmap);
it = m_map.find(key);
if (it != m_map.end())
return it->second;
}
else
{
it = m_map.find(key);
if (it != m_map.end())
return it->second;
}
return NULL;
}
inline TYPE* GetMap()
{
return &m_map;
}
inline CMyMutex* GetMutex()
{
return &m_mutexmap;
}
private:
CMyMutex m_mutexmap;
TYPE m_map;
};
#endif
=================================Mutex.h=========================
#ifndef _CPS_MUTEX_H
#define _CPS_MUTEX_H
#if defined(WIN32)
#include <windows.h>
#else
#include <pthread.h>
#endif
class CMyMutex
{
public:
CMyMutex(bool lockFlag=false);
~CMyMutex();
public:
void Lock();
void UnLock();
inline int GetCount()
{
return m_count;
}
protected:
int m_count;
#ifdef WIN32
HANDLE m_mutex;
#else
pthread_mutex_t m_mutex;
#endif
};
class CAutoMutex
{
public:
inline CAutoMutex(CMyMutex* p_Mutex):m_pMutex(p_Mutex)
{
if (m_pMutex != NULL)
m_pMutex->Lock();
}
inline ~CAutoMutex()
{
if (m_pMutex != NULL)
m_pMutex->UnLock();
}
private:
CMyMutex* m_pMutex;
};
#endif
================================mutex.cpp================================
#include "mutex.h"
CMyMutex::CMyMutex(bool lockFlag):m_count(0)
{
#ifdef WIN32
// ::InitializeCriticalSection(&m_mutex);
m_mutex = CreateMutex(NULL, FALSE, NULL);
#else
(void)pthread_mutex_init(&m_mutex, NULL);
#endif
if (lockFlag)
{
this->Lock();
}
}
CMyMutex::~CMyMutex()
{
//while (this->m_count>0)
//this->UnLock();
#ifdef WIN32
//::DeleteCriticalSection(&m_mutex);
CloseHandle(m_mutex);
#else
pthread_mutex_destroy(&m_mutex);
#endif
}
void CMyMutex::Lock()
{
//m_count++;
#ifdef WIN32
//::EnterCriticalSection(&m_mutex);
switch (WaitForSingleObject(m_mutex, INFINITE)) {
case WAIT_ABANDONED:
case WAIT_TIMEOUT:
return ;
default:
break;
}
#else
pthread_mutex_lock(&m_mutex);
#endif
}
void CMyMutex::UnLock()
{
//if (m_count<=0)
// return ;
//m_count--;
#ifdef WIN32
//::LeaveCriticalSection(&m_mutex);
ReleaseMutex(m_mutex);
#else
pthread_mutex_unlock(&m_mutex);
#endif
}
===========================用法==============================
class CTest;
CTest test;
CSuperMap<string,,test,CTest> m_stringtestMap;
CTest* pTest = new CTest;
m_stringtestMap.Insert("key",pTest);
- 线程安全的的map-CSuperMap
- Map的线程安全实现
- 一个线程安全的std::map封装
- 如何实现一个线程安全的map?
- 利用Collections将非线程安全的Map转换成线程安全的Map
- Map的线程安全与否的相关文章
- c++ 中 设计一个线程安全的map
- Map集合类中保证线程安全的策略比较
- 关于Map线程安全的几种实现方案
- 实现一个简单的线程安全c++ map
- 简单分析HashMap及其线程安全的Map类
- Map 非线程安全的证明 以及线程安全方案(Concurrent)
- Map线程安全
- Map线程安全
- java--map--线程安全
- Java集合中那些类是线程安全的 以及 Map线程安全几种实现方法
- Java集合中那些类是线程安全的 以及 Map线程安全几种实现方法
- 线程安全非线程安全的区别
- PADS9.5学习笔记
- AS
- Android开发-UI
- java程序设计_单一工作原则
- Java基础——数组
- 线程安全的的map-CSuperMap
- Android res/raw文件以及raw与res/assets异同
- POJ2551Ones(AC)
- Shader - Pass
- 黄金
- linux中sleep详解实例
- 桶排序
- Java中时间格式化及相关操作
- android Studio遇到transformClassesWithDexForDebug错误