多线程内存池基本框架(C++)

为了使多个线程并发地分配和释放内存,必须在分配器方法中添加互斥锁,下面是一种多线程内存池实现的基本框架:

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++性能的编程技术》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值