1. 程式人生 > >boost之記憶體池使用例項

boost之記憶體池使用例項

需要說明的就是初始化的時候指定的是記憶體池分配記憶體塊的大小,而且記憶體池是非執行緒安全的,多執行緒要加鎖

#ifndef BUFFER_POOL_H
#define BUFFER_POOL_H

#include "boost_comm.h"
using namespace boost;

namespace seemmo
{
	class buffer_pool
	{
	public:
		buffer_pool(int chunk_size);
		~buffer_pool();
	protected:
		static boost::mutex mtx_;
		static buffer_pool *instance()
		{
			boost::unique_lock<boost::mutex> wlock(mtx_);
			static buffer_pool inst(1024);
			return &inst;
		}
	public:
		static char *comm_sz1024_buffer()
		{
			boost::unique_lock<boost::mutex> wlock(instance()->mtx_1_);
			return (char *)instance()->m_buffer_bp.malloc();
		}
		static void comm_sz1024_free(void *p)
		{
			boost::unique_lock<boost::mutex> wlock(instance()->mtx_1_);
			instance()->m_buffer_bp.free(p);
		}

		static unsigned char *bin_value_alloc()
		{
			boost::unique_lock<boost::mutex> wlock(instance()->mtx_2_);
			return (unsigned char *)instance()->m_bin_value_.malloc();
		}

		static void bin_value_free(void *p)
		{
			boost::unique_lock<boost::mutex> wlock(instance()->mtx_2_);
			instance()->m_bin_value_.free(p);
		}

	protected:
		boost::mutex mtx_1_;
		boost::pool<> m_buffer_bp;

		boost::mutex mtx_2_;
		boost::pool<> m_bin_value_;
	private:
	};
}

#endif // BUFFER_POOL_H

#include "buffer_pool.h"

#include "config.h"

namespace seemmo
{
	boost::mutex buffer_pool::mtx_;

	buffer_pool::buffer_pool(int chunk_size)
		:m_buffer_bp(BUFFER_POOL_COMM_CHUNK_SIZE),//1k
		m_bin_value_(BUFFER_POOL_BIN_CHUNK_SIZE)//256k
	{
	}

	buffer_pool::~buffer_pool()
	{
	}
}