boost之对象池使用实例

本文探讨了如何在HTTP使用TCP短连接的场景下,利用Boost对象池来提升性能,通过快速获取和释放连接对象,有效避免了资源的频繁申请与释放问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个主要用在http使用tcp支持短连接的情况,能快速获取连接对象而不用反复申请释放资源

#ifndef	OBJECT_POOL_H
#define	OBJECT_POOL_H

#include "boost_comm.h"

#include "message_header.h"
#include "tcp_client.h"

namespace seemmo
{
	//template<object_type>
	class object_pool
	{
	public:
		object_pool();
		~object_pool();
	protected:
		static object_pool *instance()
		{
			static object_pool inst;
			return &inst;
		}		
	private:
		boost::mutex mtx2_;
	public:
		static boost::mutex * alloc_mutex();
		static void free_mutex(boost::mutex *src);

	private:
		boost::mutex mtx3_;
	public:
		static tcp_client* alloc_client();
		static void free_client(tcp_client *src);
	private:
		boost::mutex mtx4_;
	public:
		static result_data * alloc_data(string cardid, float score, string params[]);
		static void free_data(result_data *src);
	private:
		boost::mutex mtx5_;
	public:
		static ret_result *alloc_result(std::string code, std::string msg, int n = 100);
		static void free_result(ret_result *src);
	protected:
		boost::object_pool<boost::mutex> mtx_obp_;
		boost::object_pool<tcp_client> obp_client_;
		boost::object_pool<result_data> obp_data_;
		boost::object_pool<ret_result> obp_result_;
	private:
	};
}

#endif // OBJECT_POOL_H

#include "object_pool.h"

namespace seemmo
{
	object_pool::object_pool()
	{
	}

	object_pool::~object_pool()
	{
	}

	boost::mutex * object_pool::alloc_mutex()
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx2_);
		return instance()->mtx_obp_.construct();
	}

	void object_pool::free_mutex(boost::mutex *src)
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx2_);
		instance()->mtx_obp_.destroy(src);
	}

	tcp_client* object_pool::alloc_client()
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx3_);
		return instance()->obp_client_.construct();
	}

	void object_pool::free_client(tcp_client *src)
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx3_);
		instance()->obp_client_.destroy(src);
	}
	result_data * object_pool::alloc_data(string cardid, float score, string params[])
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx4_);
		return instance()->obp_data_.construct(cardid, score, params);
	}

	void object_pool::free_data(result_data *src)
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx4_);
		instance()->obp_data_.destroy(src);
	}

	ret_result *object_pool::alloc_result(std::string code, std::string msg, int n /* = 100 */)
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx5_);
		return instance()->obp_result_.construct(code, msg, n);
	}

	void object_pool::free_result(ret_result *src)
	{
		boost::unique_lock<boost::mutex> wlock(instance()->mtx5_);
		instance()->obp_result_.destroy(src);
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值