为了使多个线程并发地分配和释放内存,必须在分配器方法中添加互斥锁,下面是一种多线程内存池实现的基本框架:
template <class POOLTYE, class LOCK>
class MTMemoryPool
{
public:
inline void* alloc(size_t size);
inline void free(void* someElement);
private:
POOLTYE stPool; //单线程内存池
LOCK theLock;
};
template <class M, class L>
inline
void* MTMemoryPool<M, L>::alloc(size_t size)
{
void* mem;
theLock.lock(0);
mem = stPool.alloc(size);
theLock.unlock();
return mem;
}
template <class M, class L>
inline
void MTMemoryPool<M, L>::free(void* doomed)
{
theLock.lock();
stPool.free(doomed);
theLock.unlock();
}
/*
其中,MTMemoryPool类私有成员变量中的内存池可以采用单线程内存池,详见:
//http://blog.csdn.net/y396397735/article/details/51820849
锁类型定义如下
*/
//基类锁
class BaseLock
{
public:
virtual ~BaseLock(){}
virtual void lock() = 0;
virtual void unlock() = 0;
};
//互斥锁
class MutexLock : public BaseLock
{
public:
MutexLock(){ pthread_mutex_init(&lock, NULL); }
~MutexLock(){ pthread_mutex_destory(&lock); }
inline void lock(){
pthread_mutex_lock();
}
inline void unlock(){
pthread_mutex_unlock();
}
private:
pthread_mutex_t lock();
};
《提高C++性能的编程技术》