对象池

通过上篇无锁队列实现对象池,需要默认构造函数

#pragma once
#include 
#include "NLockQueue.h"

#define DEFAULT_BUFFER_SIZE 1024

template<class T>
class BufferObj
{
 typedef T*         PTR;
 
public:

 BufferObj(DWORD dwsize= DEFAULT_BUFFER_SIZE):BufferPool(dwsize)
 {
  CreateObjMem(dwsize);
 }
 
 PTR Alloc()
 {
  PTR ptr;
  if (!BufferPool.TryPopFront(&ptr))
  {
   ptr = new T;
  }
  return ptr;
 }
 
 void Free(PTR ptr)
 {
  if (!BufferPool.TryPushBack(ptr))
  {
   delete T;
  }
 }
 
private:

 void CreateObjMem(int dwSize)
 {
  int i = 0;
  while (i++ < dwSize)
   BufferPool.TryPushBack(new T);
 }
 
 NLockQueue<T> BufferPool;
};

你可能感兴趣的:(C++,#,线程同步)