多线程内存池实现

多线程的内存池是基于模板的类:

[cpp]  view plain copy
  1. template <typename POOLTYPE,typename LOCK>  
  2. class MTMemoryPool  
  3. {  
  4. public:  
  5.     void* alloc(size_t size);  
  6.     void free(void* someElement);  
  7. private:  
  8.     POOLTYPE stPool;  
  9.     LOCK theLock;  
  10. };  
  11.   
  12. template <typename M,typename L>  
  13. void* MTMemoryPool<M,L>::alloc(size_t size)  
  14. {  
  15.     void *mem;  
  16.     theLock.lock();  
  17.     mem=stPool.alloc(size);  
  18.     theLock.unlock();  
  19.     return mem;  
  20. }  
  21.   
  22. template <typename M,typename L>  
  23. void MTMemoryPool<M,L>::free(void* doomed)  
  24. {  
  25.     theLock.lock();  
  26.     stPool.free(doomed);  
  27.     theLock.unlock();  
  28. }  

第一个模板参数是指定的适用于单线程的内存池。要求实现alloc和free接口。

第二个参数是采用的锁的类。要求实现lock和unlock接口。

此模板类也可以适用于单线程的情况,只要实现一个锁类,其lock和unlock什么都不做。

使用此线程池的类:

[cpp]  view plain copy
  1. #include "ByteMemoryPool.h"  
  2. #include "MutexLock.h"  
  3.   
  4. class Rational  
  5. {  
  6. public:  
  7.     Rational(int a=0,int b=1):n(a),d(b) {}  
  8.   
  9.     void *operator new(size_t size)   
  10.     {  
  11.         return memPool->alloc(size);  
  12.     }  
  13.     void operator delete(void* doomed,size_t size)   
  14.     {  
  15.         memPool->free(doomed);  
  16.     }  
  17.   
  18.     static void newMemPool() {memPool=new MTMemoryPool<ByteMemoryPool,MutexLock>;}  
  19.     static void deleteMemPool() {delete memPool;}  
  20. private:  
  21.     int n;  
  22.     int d;  
  23.   
  24.     static MTMemoryPool<ByteMemoryPool,MutexLock>* memPool;  
  25. };  
  26.   
  27. MTMemoryPool<ByteMemoryPool,MutexLock>* Rational::memPool=nullptr;  

测试代码同前两篇单线程的情况。
其中MutexLock类的实现如下:

抽象基类:

[cpp]  view plain copy
  1. class ABCLock  
  2. {  
  3. public:  
  4.     virtual ~ABCLock()=0;  
  5.     virtual void lock()=0;  
  6.     virtual void unlock()=0;  
  7. };  

MutexLock类:


[cpp]  view plain copy
  1. #include "ABCLock.h"  
  2. #include <pthread.h>  
  3.   
  4. class MutexLock:public ABCLock  
  5. {  
  6. public:  
  7.     MutexLock()  
  8.     {  
  9.         pthread_mutex_init(&mutex,NULL);  
  10.     }  
  11.   
  12.     ~MutexLock()  
  13.     {  
  14.         pthread_mutex_destroy(&mutex);  
  15.     }  
  16.   
  17.     void lock()  
  18.     {  
  19.         pthread_mutex_lock(&mutex);  
  20.     }  
  21.   
  22.     void unlock()  
  23.     {  
  24.         pthread_mutex_unlock(&mutex);  
  25.     }  
  26. private:  
  27.     pthread_mutex_t mutex;  
  28. };  


 考虑继续扩充控制线程同步的类。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值